작성
·
1.6K
0
signWith(SignatureAlgorithm.HS256, env.getProperty("token.secret"))
jwt 버전 0.10 버전이상부터는 관련 내용이 문자열이 작다고 합니다. 혹시 0.11버전에 맞춰서 한다면 어떤 방식으로 해야합니까?
추가적으로 signWith의 deprecated 또한 해결 하는 방법에 대해 알려주시면 감사하겠습니다. => document 사이트 위치라도 알려주시면 직접찾아보겠습니다. 전체적으로 따라해봤는데 해쉬값이 작다고 하여 관련내용에 대해 이해를 하지 못해서 작성합니다.
답변 2
0
0
안녕하세요, 이도원입니다.
jwt 0.10 (or 0.11)이라고 하셔서 pom.xml 파일을 아래와 같이 수정한 내용을 공유해 드립니다.
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt</artifactId>-->
<!-- <version>0.9.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
AuthenticationFilter.java 파일에서는 생성자에서 Key를 생성하신 다음에, signWith 메소드에 적용해 보시면 됩니다.
public class AuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private UserService userService;
private Environment env;
private final Key key;
public AuthenticationFilter(AuthenticationManager authenticationManager,
UserService userService,
Environment env) {
super.setAuthenticationManager(authenticationManager);
this.userService = userService;
this.env = env;
byte[] keyBytes = Decoders.BASE64.decode(env.getProperty("token.secret"));
this.key = Keys.hmacShaKeyFor(keyBytes);
}
...
@Override
protected void successfulAuthentication(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain,
Authentication authResult) throws IOException, ServletException {
String userName = ((User)authResult.getPrincipal()).getUsername();
UserDto userDetails = userService.getUserDetailsByEmail(userName);
String token = Jwts.builder()
.setSubject(userDetails.getUserId())
.setExpiration(new Date(System.currentTimeMillis() +
Long.parseLong(env.getProperty("token.expiration_time"))))
// .signWith(SignatureAlgorithm.HS512, env.getProperty("token.secret"))
.signWith(key, SignatureAlgorithm.HS256)
.compact();
사용한 token.secret 값은 최소 50글자가 넘어야 해서 아래와 같이 사용했습니다.
token:
expiration_time: 864000000
secret: '01234567890123456789012345678901234567890123456789'
감사합니다.