jwt 관련 질문입니다.
1747
작성한 질문수 22
signWith(SignatureAlgorithm.HS256, env.getProperty("token.secret"))jwt 버전 0.10 버전이상부터는 관련 내용이 문자열이 작다고 합니다. 혹시 0.11버전에 맞춰서 한다면 어떤 방식으로 해야합니까?
추가적으로 signWith의 deprecated 또한 해결 하는 방법에 대해 알려주시면 감사하겠습니다. => document 사이트 위치라도 알려주시면 직접찾아보겠습니다. 전체적으로 따라해봤는데 해쉬값이 작다고 하여 관련내용에 대해 이해를 하지 못해서 작성합니다.
답변 2
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'
감사합니다.
kafka 업데이트 강의 듣고 시포요
0
115
2
강의 교안
0
106
2
마이크로서비스간 통신 시, 인증 처리
0
117
2
api gateway 에서 인증 처리
0
76
1
섹션 19 질문드립니다
0
85
2
강의 자료 업데이트
0
105
2
부하분산 강의 섹션
0
66
1
강의자료는 어디에서?
0
99
2
강의 자료는 어디서 다운 받을 수 있나요?
0
131
2
전체 사용자 조회시 오류
0
65
1
혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??
0
122
2
학습 방향
0
106
2
카프카 커넥터 사용 목적 문의
0
92
2
kafka 강의
0
118
2
서비스 디스커버리 종류
0
90
2
강의 자료에 대해서 궁금해요
0
126
2
GlobalFilter, LoggingFilter가 동작하지 않습니다.
0
97
2
Kafka Source Connect 버전 에러
0
96
2
소스커넥터는 사용안한 거 맞죠?
0
85
2
강의자료 업데이트 문의
0
101
2
강의에서 BCryptPasswordEncoder 에 역할(5-2)
0
64
1
강의 업데이트 계획이 궁금합니다.
0
121
2
MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)
0
168
2
어떤 것이 업데이트 된 건가요?
0
169
2





