์ด ํฌ์คํธ๋ ๋ฐ์ด ํ๋ก๊ทธ๋๋ฐ๋์ ์ ํ๋ธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
๋ก๊ทธ์ธ ์์ฒญ์ด ์ค๋ฉด ์ฌ์ฉ์ ์ธ์ฆ ํ JWT ํ ํฐ์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํด์คฌ์ต๋๋ค.
์ด์ ์ฌ์ฉ์๋ ๋งค๋ฒ ๋ก๊ทธ์ธ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์ด์ ์ ๋ฐ๊ธ ๋ฐ์ JWT ํ ํฐ์ ๋ค๊ณ ์๋ฒ๋ก ์์ฒญ์ ํ๋ฉด
์๋ฒ๋ ํด๋น JWT ํ ํฐ์ ๊ฒ์ฆํ์ฌ ์ ํจํ ํ ํฐ์ธ์ง ํ์ธ ํ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ JWT ํ ํฐ์ ๊ฒ์ฆํ ์ ์๋ Filter๋ฅผ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
BasicAuthenticationFilter ์์
ํค๋์ Authorization : Basic *** ๋ฐฉ์์ผ๋ก ์ธ์ฆ์ ์๋ํ๋ฉด BasicAuthenticationFilter์์ ํด๋น ํ ํฐ์ ๊ฒ์ฆํ์ฌ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋๋ฐ,
์ฐ๋ฆฌ๋ Basic ๋ฐฉ์์ด ์๋, JWT๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
doFilterInternal
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
String jwt_Header = request.getHeader("Authorization");
// ํ ํฐ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ด์๋์ง ์ฒดํฌ!
if(jwt_Header != null && jwt_Header.startsWith("Bearer")) {
// JWT ์ถ์ถ
String jwtToken = jwt_Header.replace("Bearer", "").trim();
// JWT Verify (๊ฒ์ฆ) -> ๊ฒ์ฆ ์คํจ ์ exception ๋ฐ์
String username = JWT.require(Algorithm.HMAC256("secret")).build().verify(jwtToken).getClaim("username").asString();
// Verify ํต๊ณผ? -> ์๋ช
์ด ์๋ฃ๋์๋ค๋ ๋ป.
// username์ด ๋น์ด์์ง ์์์ง ์ฒดํฌ
if (username != null && !username.equals("")) {
UserDetails userDetails = accountService.loadUserByUsername(username);
// AuthenticationManager๋ก ์ธ์ฆ์ ํ๋ฉด ์ค์ ๋ก๊ทธ์ธ์ ํ ๋์ ํ์ํ ์์
์ด๋,
// Authentication authenticate = getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities()));
// ํ์ฌ ์ฐ๋ฆฌ๋ Token ์๋ช
์ผ๋ก ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ์๊ธฐ ๋๋ฌธ์ username์ ๊ฐ์ง๊ณ ๊ฐ์ ๋ก Authentication ์ ๋ง๋ค์ด securityContextHolder์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities());
// ์ธ์
์ ์ฅ (๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด์)
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
doFilter(request, response, chain);
}
- ๋จผ์ ํค๋์ Authorization ๊ฐ์ ๋ฝ์ ์ต๋๋ค.
- ํด๋น ๊ฐ์ด ์๋์ง, Bearer ๋ฐฉ์์ ํ ํฐ์ธ์ง ํ์ธ์ ํฉ๋๋ค.
- JWT ํ ํฐ ๊ฐ์ ์ถ์ถํ์ฌ verify๋ฅผ ์๋ํฉ๋๋ค.
- ํ ํฐ ๊ฒ์ฆ์ ์ฑ๊ณตํ์๋ค๋ฉด, user ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ Authentication ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- SecurityContextHolder์ ๋ด์ต๋๋ค. (์ด๋, ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค.)