1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| @Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authentication) throws IOException, ServletException {
/* 단일토큰 방법
MyUserDetails myUserDetails = (MyUserDetails) authentication.getPrincipal();
String username = myUserDetails.getUsername();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
Iterator<? extends GrantedAuthority> iterator = authorities.iterator();
GrantedAuthority auth = iterator.next();
String role = auth.getAuthority();
String token = jwtUtil.createJwt(username, role, 60*60*10L);
response.addHeader("Authorization", "Bearer " + token);
// 위의 HTTP인증방식은 RFC 7235 정의에 의해서 공식적으로 형식을 지정해줌
// Authorization: 타입 인증토큰
// Authorization: Bearer 인증토큰string
// "Bearer "의 경우 공백을 끝에 붙여줘야 함
*/
// 유저 정보 가져오기
String username = authentication.getName();
Collection<? extends GrantedAuthority> collection = authentication.getAuthorities();
Iterator<? extends GrantedAuthority> iterator = collection.iterator();
GrantedAuthority grantedAuthority = iterator.next();
String role = grantedAuthority.getAuthority();
String access = jwtUtil.createJwt("access", username, role, 6000000L);
String refresh = jwtUtil.createJwt("refresh", username, role, 86400000L);
// 응답 설정
response.setHeader("access", access);
response.addCookie(createCookie(refresh));
// creatCookie() 메소드 구현
response.setStatus(HttpStatus.OK.value());
}
private Cookie createCookie(String value){
Cookie cookie = new Cookie("refresh", value); // 쿠키생성
cookie.setMaxAge(24*60*60); // 쿠키의 생명주기, refresh 토큰의 생명주기와 동일하게 넣기
// cookie.setSecure(true); // Https 사용시 설정
// cookie.setPath("/"); // 쿠키가 적용될 범위를 설정할 수 있다.
cookie.setHttpOnly(true); // 프론트에서 자바스크립트로 쿠키에 접근 할 수 없도록 설정
return cookie;
}
|