• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JWT 실습 마지막 오류

21.12.23 17:56 작성 조회수 239

0

강의 너무나 잘 들었습니다. 

JWT 인증 마지막까지 수업을 듣고 user, manager, admin으로 api 요청시 강의와 달리

권한별로 api 접근이 정상 동작하지 않습니다.

강의를 그대로 따라하였으며 회원가입, 로그인하여 토큰 발급까지는 정상 동작합니다만

api 요청시 권한별로 페이지 이동이 되지 않습니다. jwt 관련 git 주소가 없어 추가 확인이 안되어 문의 드립니다.

 

"27장 따라하는 중입니다. Controller를 안타는듯 합니다." 질문과 동일 내용으로 보여집니다.

 

 


JwtAuthorizationFilter,
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
System.out.println("successfulAuthentication 실행됨 : 인증이 완료되었다는 뜻임.");

PrincipalDetails principalDetails = (PrincipalDetails) authResult.getPrincipal();

//Hash 암호방식
String jwtToken = JWT.create()
.withSubject("토큰")
.withExpiresAt(new Date(System.currentTimeMillis()+(JwtProperties.EXPIRATION_TIME)))
.withClaim("id", principalDetails.getUser().getId())
.withClaim("username", principalDetails.getUser().getUsername())
.sign(Algorithm.HMAC512(JwtProperties.SECRET));

// super.successfulAuthentication(request, response, chain, authResult);
response.addHeader(JwtProperties.HEADER_STRING, JwtProperties.TOKEN_PREFIX + jwtToken);

}

SecurityConfig
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(corsFilter) // 시큐리터 필터에 등록 인증(O), @CrossOrigin(인증x)
.formLogin().disable() // form login disable
.httpBasic().disable() //
.addFilter(new JwtAuthenticationFilter(authenticationManager())) // ID, PW 체크, 파라미터 : AuthenticationManager
.addFilter(new JwtAuthorizationFilter(authenticationManager(), userRepository))
.authorizeRequests()
.antMatchers("/api/v1/user/**")
.access("hasRole('ROLE_USER') or hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
.antMatchers("/api/v1/manager/**")
.access("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')")
.antMatchers("/api/v1/admin/**")
.access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();

RestApiController
// user, manager, admin 권한 접근 가능
@GetMapping("/api/v1/user")
public String user() {
return "user";
}

// manager, admin 권한 접근 가능
@GetMapping("/api/v1/manager")
public String manager() {
return "manager";
}

// admin 권한 접근 가능
@GetMapping("/api/v1/admin")
public String admin() {
return "admin";
}

답변 1

답변을 작성해보세요.

0