Error: SpringSecurity CustomFilter 추가시 @Bean 사용 주의

Message

는 없고

원인

Bean생성하면 자동으로 filterchain에 등록이 되어 버리는데

별 생각없이 쓰면 그냥 Bean생성을 해 버린다.

그리고 오류없이 동작할 때도 있다.

해결

Filter 상속받는 애들을 Security에 사용하려면 @Bean 생성을 하지 않는다.

SpringSecurityFilterChain에만 등록되야 하는데 Servlet Filter에 등록 돼 버리니

SecurityFilterChain이 한개만 있는경우는 슬쩍 넘어갈 때도 있는데 두개이상 쓰는 경우 상위에서 이 필터가 동작 해 버리면 확실히 오류가 난다.
@Bean말고 그냥 new 해서 쓴다.

Spring Security 정리

SecurityFilter와 ServletFilter

이름은 똑같이 Filter이지만 Servlet에서 관리되는 Filter와 구조가 다르다.

여기서는 ServletFilter와 SecurityFilter로 구분하겠다.

 

https://docs.spring.io/spring-security/site/docs/3.0.x/reference/security-filter-chain.html

DelegateFilterProxy만 ServletFilter이다.

다른 SecurityFilter는 이 하위에서 동작한다.

 

ex) API와 웹화면이 별도의 체인 사용

SecurityFilter중 하나인 LogoutFilter의 선언부

SecurityFilter도 javax.servlet.Filter를 상속받지만 아예 다른 형태로 만드는게 혼란이 없지 않았을까 하는 생각이 든다.

 

Cors필터나 기타 인증필터를 추가해서 Security인증을 하고싶다면 ServetFilter가 아닌 SecurityFilterChain에 추가를 해야한다.

Security의 핵심인 FilterChain

https://stackoverflow.com/questions/41480102/how-spring-security-filter-chain-works

SpringSecurity JavaConfig 기본설정부분의 일부

기본적으로 셋팅되는 필터들

서로간에 강한 의존성을 가지며 순서가 중요하다.

 

FilterChain을 구동시키는 Filter만

JWT나 CORS 필터 적용이 필요하다면 Security에 올리는게 좋다.

 

RoleVoter

 

 

issue,bug: SpringSecurity Redirect to favicon.ico When after login action.

http://blog.naver.com/PostView.nhn?blogId=jadin1&logNo=70127130610

이유는 위 블로그에 영문,한글 다 잘 설명되어 있다.
제목을 영어로 쓴 것은 영어를 잘 해서가 아니라… 어차피 이런 종류 문서 검색은 다 영어로 할테니까…

내 경우에는 시큐리티 설정을 이런식으로 해놧었다.

/user/login 으로 로그인 주소를 잡아놓은 경우에는 /user/resources/…/favico.ico으로 redirect된다.
/~~~check 기본주소로 로그인 주소를 잡아놓고 돌리면 /favicon.ico 로 redirect된다.

키워드:
리다이렉트,스프링시큐리티,버그