У меня проблема в том, что HttpServletRequest request.getHeader("Authorization")
всегда является нулевым значением, я отправляю с угловым сервисом мой запрос на получение с заголовками, но они, кажется, никогда не приходят.
Я использую Spring Boot в качестве моего REST-сервера. И Angular как мой фронтенд.
user.service.ts
getUserDetails(username): Observable<any> {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
// tslint:disable-next-line: object-literal-key-quotes
'Authorization': sessionStorage.getItem('token'),
});
// tslint:disable-next-line: object-literal-shorthand
console.log(`http://localhost:8080/users/` + username, { headers: headers });
return this.http.get(`http://localhost:8080/users/` + username, { headers: headers }).pipe(
map(
userData => {
console.log(userData);
return userData;
}
));
}
JWTRequestFilter.java
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
final String requestTokenHeader = request.getHeader("Authorization");
String username = null;
String jwtToken = null;
// JWT Token is in the form "Bearer token". Remove Bearer word and get
// only the Token
if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) {
jwtToken = requestTokenHeader.substring(7);
try {
username = jwtTokenUtil.getUsernameFromToken(jwtToken);
} catch (IllegalArgumentException e) {
System.out.println("Unable to get JWT Token");
} catch (ExpiredJwtException e) {
System.out.println("JWT Token has expired");
}
} else {
logger.warn("JWT Token does not begin with Bearer String");
}
// Once we get the token validate it.
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.jwtUserDetailsService.loadUserByUsername(username);
// if token is valid configure Spring Security to manually set
// authentication
if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities());
usernamePasswordAuthenticationToken
.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
// After setting the Authentication in the context, we specify
// that the current user is authenticated. So it passes the
// Spring Security Configurations successfully.
SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
}
}
chain.doFilter(request, response);
}
Сетевой трафик:
Когда я иду на страницу учетной записи, где я вызываю запрос на получение http://localhost:8080/users/testUser
RequestTokenHeader всегда нулевой?
Надеюсь, вы, ребята, можете мне помочь. Заранее спасибо.