์ธ์ฆ์ด๋ ๊ถํ์ด ํ์ํ ์์ฒญ
1. ์ธ์ฆ์ด ํ์ํ uri์์ฒญ์ด ์ฌ๋๋ง๋ค ์ธ์
์ ์์ฑํ๋ค๋ฉด JWT์ ์ด์ ์ธ ์ธ์
์์ญ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์ฅ์ ์ด ์์ด์ง๋๊ฒ์ด ์๋๋๊น? ๋จ์ง ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ํตํด์ ๊ถํ์ฒดํฌ๋ฅผ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด์ ์ธ์
์์ญ์ ๊ณ์ ํ ๋นํ๊ณ ์์ฑํ๋ฉด ์ข์ง ์์ ๋ฐฉ๋ฒ์ด์ง ์์ต๋๊น?! 2. @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http.csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) //์ธ์
์ ์ฌ์ฉํ์ง ์๊ฒ ๋ค! .and() .formLogin().disable() .httpBasic().disable() //Bearer ๋ฐฉ์ ์ฌ์ฉ -> header ์ authentication ์ ํ ํฐ์ ๋ฃ์ด ์ ๋ฌํ๋ ๋ฐฉ์ .apply(new MyCustomDsl()) .and() .authorizeRequests(authroize -> authroize .antMatchers("/api/v1/user/**") .hasAuthority("USER") .antMatchers("/api/v1/manager/**") .hasAuthority("MANAGER") .antMatchers("/api/v1/admin/**") .hasAuthority("ADMIN") .anyRequest().permitAll()) .build();} .anyRequest().permiAll()๋ก ์ธํด์ ์์ uri์ด ์๋ ์ํฉ์์๋ ์ธ์ฆ ๊ถํ์ฒดํฌ๋ฅผ ํ์ง ์๋๊ฒ์ด ์๋๋๊น? 3. @Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("์ธ์ฆ์ด๋ ๊ถํ์ด ํ์ํ ์์ฒญ"); String jwtHeader = request.getHeader(JwtProperties.HEADER_STRING); if(jwtHeader ==null || !jwtHeader.startsWith(JwtProperties.TOKEN_PREFIX)) { /** * ์ด๊ฑฐ ํํฐ๋ก ๊ฑธ๋ ค์ผ ๋๋๊ฑฐ ์๋์ผ?! ์ธ์ฆ์ด๋ ๊ถํ์ด ์๋๊ฑฐ๋๊น */ chain.doFilter(request, response); return; } System.out.println("jwtHeader:" + jwtHeader); String token = request.getHeader(JwtProperties.HEADER_STRING).replace(JwtProperties.TOKEN_PREFIX, ""); String username = JWT.require(Algorithm.HMAC512(JwtProperties.SECRET)).build().verify(token) .getClaim("username").asString(); if(username !=null) { User user = userRepository.findByUsername(username); // ์ธ์ฆ์ ํ ํฐ ๊ฒ์ฆ์ ๋. // ์ธ์ฆ์ ํ๊ธฐ ์ํด์๊ฐ ์๋ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ํํด์ฃผ๋ ๊ถํ ์ฒ๋ฆฌ๋ฅผ ์ํด // ์๋์ ๊ฐ์ด ํ ํฐ์ ๋ง๋ค์ด์ Authentication ๊ฐ์ฒด๋ฅผ ๊ฐ์ ๋ก ๋ง๋ค๊ณ ๊ทธ๊ฑธ ์ธ์
์ ์ ์ฅ! PrincipalDetails principalDetails = new PrincipalDetails(user); Authentication authentication = new UsernamePasswordAuthenticationToken( principalDetails, // ๋์ค์ ์ปจํธ๋กค๋ฌ์์ DIํด์ ์ธ ๋ ์ฌ์ฉํ๊ธฐ ํธํจ. null, // ํจ์ค์๋๋ ๋ชจ๋ฅด๋๊น null ์ฒ๋ฆฌ, ์ด์ฐจํผ ์ง๊ธ ์ธ์ฆํ๋๊ฒ ์๋๋๊น!! principalDetails.getAuthorities()); // ๊ฐ์ ๋ก ์ํ๋ฆฌํฐ์ ์ธ์
์ ์ ๊ทผํ์ฌ ๊ฐ ์ ์ฅ SecurityContextHolder.getContext().setAuthentication(authentication); } chain.doFilter(request, response);} ์ฃผ์์ผ๋ก ํ์ํด๋ ๋ถ๋ถ์์ JWTํ ํฐ์ ๊ฐ์ง๊ณ ์๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ํฉ์ด๋ ํํฐ๋ฅผ ํตํด์ ์ปจํธ๋กค๋ฌ๋ฑ๊น์ง ํธ์ถํ์ง ์๊ฒ ์ฒ๋ฆฌํด์ผ๋์ง ์์ต๋๊น? doFilter๋ฅผ ํธ์ถํ์ง ์๊ณ ๋ต๋ณํด์ฃผ์
์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋น!!