Server๐Ÿงค/SpringSecurity

[SpringSecurity] CustomFilter ์ƒ์„ฑํ•˜๊ธฐ

yujindonut 2023. 7. 17. 12:26
728x90

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(์ƒˆ๋กœ์šดํ•„ํ„ฐ, ์ด๋ฏธ์กด์žฌํ•˜๊ณ ๋’ค์—์žˆ๋Š”ํ•„ํ„ฐ)
728x90