Spring/spring security
Spring Security - AnonymousAuthenticationFilter란
개발 N년차
2021. 9. 11. 01:01
반응형
- AnonymousAuthenticationFilter 란 -
스프링 시큐리티에서 AnonymousAuthenticationFilter는 익명 사용자의 요청에 대해 처리해주는 필터로 인증을 하지 않은 요청인 경우 인증 객체를 익명 권한이 들어가 있는 객체를 만들어 SecurityContextHolder에 넣어 주는 역할을 한다.
기본적으로 스프링 시큐리티 필터에 포함이 되어 있는 필터이며 만들어지는 객체는 아래와 같은 값을 가지고 있다.
- pricial : anonymousUser
- authorities : ROLE_ANONYMOUS
// 기본 생성자
public AnonymousAuthenticationFilter(String key) {
this(key, "anonymousUser", AuthorityUtils.createAuthorityList(new String[]{"ROLE_ANONYMOUS"}));
}
protected Authentication createAuthentication(HttpServletRequest request) {
AnonymousAuthenticationToken token = new AnonymousAuthenticationToken(this.key, this.principal, this.authorities);
token.setDetails(this.authenticationDetailsSource.buildDetails(request));
return token;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
if (SecurityContextHolder.getContext().getAuthentication() == null) {
SecurityContextHolder.getContext().setAuthentication(this.createAuthentication((HttpServletRequest)req));
// 생략 ...
}
chain.doFilter(req, res);
}
createAuthentication 메서드를 호출 후 기본 객체를 만들어 SecurityContextHolder에 Authentication 객체를 넣어준다.
AnonymousAuthenticationFilter 필터로 인해 시큐리티에서는 SecurityContextHolder.getContext().getAuthentication() 를 하더라도 항상 인증 객체가 있기에 비로그인 사용자(익명 사용자)를 체크하기 위해서는 Role 검사를 해야 한다.
반응형