요청이 오면 시큐리티는
BasicAuthenticationFilter로 보내는 거 같다
왜냐면 테스트를 해봤는데
모든 페이지 이동시
이 필터가 걸려있는 쪽으로 온다
1.jwtAuthorizationFilter 만들기
헤더 검사 if(request.getHeader("Authorization")==null||!request.getHeader("Authorization").startsWith("Bearer")){
헤더가 있다면 토큰 검사
String jwtToken=request.getHeader("Authorization");
토큰 해제
int userid=JWT.require(Algorithm.HMAC512("kim")).build().verify(jwtToken).getClaim("id").asInt();
유저 정보 가져오기
userDto userDto=dao.findById(userid).orElseThrow(()->new RuntimeException("존재하지 않는 회원입니다"));
인증시켜주기
principaldetail principaldetail=new principaldetail(userDto); Authentication authentication=new UsernamePasswordAuthenticationToken(userDto.getEmail(),userDto.getPwd(),principaldetail.getAuthorities());
여기가 중요한데
그리고 이미 인증된 사람의 인증을 만들어 준다
로그인 때 처럼 아이디/비번을 검사 한는게 아니라
인증을 만들어주는것이다!
필터 태우기
chain.doFilter(request, response);
2. 시큐리티 필터 등록
필터에 등록 해주자
.addFilter(new jwtAuthorizationFilter(authenticationManager(),dao,jwtService))
테스트
restcontroller
인증 없이 접근 가능
@RequestMapping("/auth/head")
인증해야 접근 가능
@RequestMapping("/head")
토큰 타임 늘려주기
jwtService
테스트 시작!
/auth/**만 토큰 없이 가능해야 한다!
/head
노토 큰
토큰 추가
토큰 없이 접근 불가능!
/auth/head
토큰 없이 접근 가능!
+추가 권한에 대해 테스트를 해보자
restcontroller
권한은 user이다
여기만 접근 가능해야 한다
@RequestMapping("/api/v1/user/test")
public String user(HttpServletRequest request,HttpServletResponse response) {
테스트
admin
403 에러 권한 없음!
manage
403 에러 권한 없음!
user
정상적으로 접근에 성공!
'Jwt > Jwt 토큰검증' 카테고리의 다른 글
springboot security jwt 검증필터 만들기(BasicAuthenticationFilter) (0) | 2022.01.01 |
---|