CustomFilter
ํ๋ก์ ํธ์ SpringSecurity๋ฅผ ํฌํจ์์ผ ๊ฐ๋ฐํ๋ค๋ณด๋ฉด, SpringSecurity์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ํํฐ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๋ฐฉ์๋๋ก ๋์ํ๋ ํํฐ๊ฐ ํ์ํจ. ์ปค์คํ ํํฐ๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
์ปค์คํ ํํฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ค๋ฅธ ํํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก Filter Interface๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ Filter Interface๋ฅผ ์ง์ ๊ตฌํํ๊ฒ ๋๋ฉด ์ค๋ณต์คํ ๋ฌธ์ ๊ฐ ์์ด์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ OncePerRequestFilter๋ฅผ ๊ตฌํํ๊ธฐ๋ฅผ ๊ถ์ฅ.
CustomFilter ํ์ํ ์์
๊ฐ์ธ๋ณด์๋
ธํธ์๋น์ค๋ 1๋ช
์ ์ ์ ๋ 1๊ฐ์ ๊ถํ์ ๊ฐ๋๋ก ๋์ด์์ต๋๋ค.
๊ถํ์ด ๋๋์ด์ ธ์๋ค๋ณด๋ ํ
์คํธํ๋๋ฐ ์ด๋ ค์์ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ tester ์ ์ ์ธ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๊ถํ์ ํ๋ฒ์ ๊ฐ๋ ํํฐ๋ฅผ ๋ง๋ค๊ธฐ๋ก ํ์์ต๋๋ค.
public class TesterAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) {
Authentication authentication = super.attemptAuthentication(request, response);
User user = (User) authentication.getPrincipal();
if (user.getUsername().startsWith("tester")) {
return new UsernamePasswordAuthenticationToken(user, null, Stream.of("ROLE_ADMIN", "ROLE_USER").map(authority -> (GrantedAuthority) () -> authority).collect(Collectors.toList())
);
}
return authentication;
Custom Filter ์ ์ฉ
SpringSecurityConfig(WebSecurityConfigurerAdapter)์์ ํํฐ๋ฅผ ์ถ๊ฐ
์ด๋ฏธ๋ฑ๋ก๋ ํํฐ๋ฅผ ํ๋ ์ ํ๊ณ ๊ทธ ์์ ์์นํ ๊ฒ์ธ์ง ๋ค์ ์์นํ ๊ฒ์ธ์ง ์์๋ฅผ ์ ํ๋ค.
http.addFilterBefore(์๋ก์ดํํฐ, ์ด๋ฏธ์กด์ฌํ๊ณ ์์์๋ํํฐ)
http.addFilterAfter(์๋ก์ดํํฐ, ์ด๋ฏธ์กด์ฌํ๊ณ ๋ค์์๋ํํฐ)