Jwt/Jwt 토큰검증

Spring boot Jwt토큰 검증하기!(1) with BasicAuthenticationFilter

디비드킴 2021. 7. 16. 19:06

요청이 오면 시큐리티는
BasicAuthenticationFilter로 보내는 거 같다
왜냐면 테스트를 해봤는데
모든 페이지 이동시
이 필터가 걸려있는 쪽으로 온다

1.jwtAuthorizationFilter 만들기

jwtAuthorizationFilter.java

헤더 검사 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. 시큐리티 필터 등록

security.java


필터에 등록 해주자
.addFilter(new jwtAuthorizationFilter(authenticationManager(),dao,jwtService))

테스트

restcontroller

restcontroller.java

인증 없이 접근 가능
@RequestMapping("/auth/head")
인증해야 접근 가능
@RequestMapping("/head")
토큰 타임 늘려주기

jwtService

jwtService.java


테스트 시작!
/auth/**만 토큰 없이 가능해야 한다!

/head
노토 큰

postman

토큰 추가

postman
vscode

토큰 없이 접근 불가능!

/auth/head

postman

토큰 없이 접근 가능!

+추가 권한에 대해 테스트를 해보자

restcontroller

restcontroller.java

권한은 user이다

여기만 접근 가능해야 한다
@RequestMapping("/api/v1/user/test")
public String user(HttpServletRequest request,HttpServletResponse response) {

테스트

admin

postman

403 에러 권한 없음!

manage

postman

403 에러 권한 없음!

user

postman

정상적으로 접근에 성공!