반응형

1. Spring Security Custom Filter

Spring Security 에 Custom Filter를 추가할 수 있다.

1.1 GenericFilterBean

기본 로그인 세팅 후 클래스를 생성하여 GenericFilterBean을 상속 받은 뒤 security-context.xml에 설정해주면 된다.

public class CustomFilter extends GenericFilterBean {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub

		chain.doFilter(request, response);
		
	}

}

 

1.2 security-context.xml

security-context.xml에 생성한 filter를 추가해 주면 된다.

	<security:http auto-config='true' use-expressions="true">
		<security:csrf disabled="true" />
		<security:intercept-url  />
		<security:form-login />
		<security:logout  />

		<security:custom-filter before="FORM_LOGIN_FILTER" ref="customFilter" />
	</security:http>

	<bean id="customFilter"
		class="com.test.app.filter.CustomFilter" />

 

before 대신 after, position을 사용할 수 있다. ref 에는 생성한 filter 클래스를 입력한다.

(현재 예제 : FORM_LOGIN_FILTER - 로그인 폼 인증 처리)

before - FORM_LOGIN_FILTER 인증 전에 생성한 filter 호출

after - FORM_LOGIN_FILTER 인증 후에 생성한 filter 호출

position - FORM_LOGIN_FILTER 대체를 생성한 filter로 대체 함.

position을 사용할 경우 security auto-config를 사용하지 않으므로 auto-config를 false로 해야 한다.

(auto-config : Automatically registers a login form, BASIC authentication, anonymous authentication, logout services, remember-me and servlet-api-integration. If set to "true", all of these capabilities are added (although you can still customize the configuration of each by providing the respective element). If unspecified, defaults to "false".)

 

2. Standard Filter Aliases and Ordering

FORM_LOGIN_FILTER 대신에 사용할 수 있는 항목들은 아래와 같다.

CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel
SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter http
CONCURRENT_SESSION_FILTER ConcurrentSessionFilter session-management/concurrency-control
LOGOUT_FILTER LogoutFilter http/logout
X509_FILTER X509AuthenticationFilter http/x509
PRE_AUTH_FILTER AstractPreAuthenticatedProcessingFilter Subclasses N/A
CAS_FILTER CasAuthenticationFilter N/A
FORM_LOGIN_FILTER UsernamePasswordAuthenticationFilter http/form-login
BASIC_AUTH_FILTER BasicAuthenticationFilter http/http-basic
SERVLET_API_SUPPORT_FILTER SecurityContextHolderAwareRequestFilter http/@servlet-api-provision
JAAS_API_SUPPORT_FILTER JaasApiIntegrationFilter http/@jaas-api-provision
REMEMBER_ME_FILTER RememberMeAuthenticationFilter http/remember-me
ANONYMOUS_FILTER AnonymousAuthenticationFilter http/anonymous
SESSION_MANAGEMENT_FILTER SessionManagementFilter session-management
EXCEPTION_TRANSLATION_FILTER ExceptionTranslationFilter http
FILTER_SECURITY_INTERCEPTOR FilterSecurityInterceptor http
SWITCH_USER_FILTER SwitchUserFilter N/A

 

참고 :

www.baeldung.com/spring-security-custom-filter

docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-custom-filters

반응형

'Develop > Spring' 카테고리의 다른 글

Spring Security URL login  (0) 2021.01.22
Spring Tomcat JNDI 설정  (0) 2020.11.17
Spring security 로그인(DB에 있는 아이디 조회)  (0) 2019.11.02
Spring Mybatis + MariaDB(HikariCP) 설정  (0) 2019.10.24
Spring 3 에서 4로 migration  (0) 2019.10.22
반응형

a태그안에 a태그를 포함한 다른 태그들 있으면 다른태그들이 끝에 오기전에 먼저 닫힘

복잡한 코드안에 a태그가 있는걸 인지하지 못해 오랜시간 삽질했 던 기억이 있다. 

 

 

Ex)

<html>
<head>
</head>

<body>

<a href="#"> 
<div> <a href="#">test1</a> </div>
test2
</a>

</body>

</html>

 

결과 :

반응형
반응형

1. Keyboard package

1.1 사용한 패키지

Windows Keyboard를 제어할 목적으로 Python의 Keyboard 패키지를 사용하였다.

https://github.com/boppreh/keyboard

 

boppreh/keyboard

Hook and simulate global keyboard events on Windows and Linux. - boppreh/keyboard

github.com

 

1.2 사용목적

한 손으로 사용하기 힘든 단축키를 한손으로만 사용하기 위해 Keyboard Pacakge에서의 Hotkey를 사용하였다.

예를 들어, 윈도우 데스크톱 이동 명령어인 ctrl+window key+left or right 는 한손으로는 무리가 가기 때문에 이를 위해 아래와 같이 작성하여, 한손으로 사용하고자 하였다.

import keyboard

def main():
    
    keyboard.add_hotkey('cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left'))

    keyboard.add_hotkey('cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right'))
 
    keyboard.wait()  

if __name__== '__main__':
    main()

 

2. 문제

2.1 Keyboard Package 한/영키 문제

사용 중에 가끔 먹통이 되는 이유가 있었는 데, 원인을 파악해 보니 한/영키 문제 였다.

 

2.2 해결

한/영키를 누를 경우 Keyboard에 hangeul 이라는 것이 늘 따라 붙게 된다. 따라서 앞에 hangeul이라는 것을 붙이면 해결된다. 아래는 해결한 코드이다.

import keyboard

def main():
    
    keyboard.add_hotkey('cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left'))
    keyboard.add_hotkey('hangeul+cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left')) # hangeul 붙임

    keyboard.add_hotkey('cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right'))
    keyboard.add_hotkey('hangeul+cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right')) # hangeul 붙임

    keyboard.wait()  

if __name__== '__main__':
    main()

 

이렇게 한/영키를 통해 먹통이 되는 Keyboad Pacakge를 앞에 hangeul 이라는 단어를 붙여 해결 할 수 있다.

반응형

+ Recent posts