spring securty의 설정 간소화 사용 시 커스텀 필터 적용은?
- 작성자 :
- 박*공
- 작성일 :
- 2014-09-02 15:40:49
- 조회수 :
- 991
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
전자정부에서 제공하는 spring security의 설정 간소화를 이용하여 context-security.xml 구성 하였습니다.
form에서 입력한 아이디, 암호를 이용하여 정상적으로 로그인을 한 이후에 필요한 후 처리를 하고자 합니다.
필터를 사용하여 구현을 하고 싪은데 가능 할까요?, 어떤식으로 가능할 가요??
form에서 입력한 아이디, 암호를 이용하여 정상적으로 로그인을 한 이후에 필요한 후 처리를 하고자 합니다.
필터를 사용하여 구현을 하고 싪은데 가능 할까요?, 어떤식으로 가능할 가요??
A
안녕하세요. 박태공님.
현재 설정 간소화 상으로는 authentication success handler나 failure handler를 등록할 수 있진 않습니다.
해당 기능을 설정 간소화 상에서 사용될 수 있는 기능으로 판단하여 차기 업그레이드 반영하도록 하겠습니다.
(설정 간소화는 Spring Security의 모든 기능을 간소화하기 위한 것이 아니고, 많이 활용되는 부분에 대하여 지원)
다만, 현재로더 다음과 같은 방식으로 위 handler를 등록하실 수 있습니다.
ApplicationContextAware bean으로 Spring container 초기화 시 다음과 같은 처리를 등록 만드신 간단하게 handler를 등록하실 수 있습니다.
1. Security Filter를 가져오는 메소드
private <T extends Filter> T getSecurityFilter(Class<T> type) {
Map<String, DefaultSecurityFilterChain> filterChainMap = context.getBeansOfType(DefaultSecurityFilterChain.class);
for (DefaultSecurityFilterChain filterChain : filterChainMap.values()) {
for (Filter filter : filterChain.getFilters()) {
if (type.isInstance(filter)) {
return type.cast(filter);
}
}
}
//throw new NoSuchBeanDefinitionException("No bean of type [" + type.getName() + "] is defined.");
throw new NoSuchBeanDefinitionException(type);
}
2. Handler 등록 부분
UsernamePasswordAuthenticationFilter filter = getSecurityFilter(UsernamePasswordAuthenticationFilter.class);
filter.setAuthenticationSuccessHandler(successHandler);
* successHandler는 생성하힌 Handler bean
그럼, 즐거운 하루되십시오.
감사합니다.
현재 설정 간소화 상으로는 authentication success handler나 failure handler를 등록할 수 있진 않습니다.
해당 기능을 설정 간소화 상에서 사용될 수 있는 기능으로 판단하여 차기 업그레이드 반영하도록 하겠습니다.
(설정 간소화는 Spring Security의 모든 기능을 간소화하기 위한 것이 아니고, 많이 활용되는 부분에 대하여 지원)
다만, 현재로더 다음과 같은 방식으로 위 handler를 등록하실 수 있습니다.
ApplicationContextAware bean으로 Spring container 초기화 시 다음과 같은 처리를 등록 만드신 간단하게 handler를 등록하실 수 있습니다.
1. Security Filter를 가져오는 메소드
private <T extends Filter> T getSecurityFilter(Class<T> type) {
Map<String, DefaultSecurityFilterChain> filterChainMap = context.getBeansOfType(DefaultSecurityFilterChain.class);
for (DefaultSecurityFilterChain filterChain : filterChainMap.values()) {
for (Filter filter : filterChain.getFilters()) {
if (type.isInstance(filter)) {
return type.cast(filter);
}
}
}
//throw new NoSuchBeanDefinitionException("No bean of type [" + type.getName() + "] is defined.");
throw new NoSuchBeanDefinitionException(type);
}
2. Handler 등록 부분
UsernamePasswordAuthenticationFilter filter = getSecurityFilter(UsernamePasswordAuthenticationFilter.class);
filter.setAuthenticationSuccessHandler(successHandler);
* successHandler는 생성하힌 Handler bean
그럼, 즐거운 하루되십시오.
감사합니다.