Я использую Spring-Security и библиотеку JWT для генерации токена. Когда пользователь проходит аутентификацию, я получаю токен авторизации в ответ:
Authorization: Bearer eyJhbGciOiJIUzUxMiJ...
Во всех уроках я видел авторов, вставляющих этот токен в заголовок авторизации при отправке запроса GET с использованием POSTMAN, но не было учебника, как он работает в реальном запросе. Хотя в моем Почтальоне это работает, когда я вставляю заголовки и получаю 200 OK.
Мне интересно, как я могу включить этот заголовок в реальный код?
public class JwtUsernameAndPasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private final AuthenticationManager authenticationManager;
private final JwtConfig jwtConfig;
private final SecretKey secretKey;
public JwtUsernameAndPasswordAuthenticationFilter(
AuthenticationManager authenticationManager,
JwtConfig jwtConfig,
SecretKey secretKey) {
this.authenticationManager = authenticationManager;
this.jwtConfig = jwtConfig;
this.secretKey = secretKey;
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
try {
System.out.println("Authentication token " + request.getInputStream());
UsernameAndPasswordAuthenticationRequest authenticationRequest =
new ObjectMapper().readValue(request.getInputStream(),
UsernameAndPasswordAuthenticationRequest.class);
Authentication authentication = new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
);
SecurityContextHolder.getContext().setAuthentication(authentication);
Authentication authenticate = authenticationManager.authenticate(authentication);
return authenticate;
} catch(IOException e) {
throw new RuntimeException("new runtime exception " + e);
}
}
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
FilterChain chain, Authentication authResult) throws IOException, ServletException {
String token = Jwts.builder()
.setSubject(authResult.getName())
.claim("authorities", authResult.getAuthorities())
.setIssuedAt(new Date())
.setExpiration(java.sql.Date.valueOf(LocalDate.now().plusDays(jwtConfig.getTokenExpirationAfterDays())))
.signWith(secretKey)
.compact();
System.out.println("This is token: " + token);
response.addHeader(jwtConfig.getAuthorizationHeader(), jwtConfig.getTokenPrefix() + token);
}
}
РЕДАКТИРОВАТЬ
Вот мой запрос веб-интерфейса. После этого звонка я получаю заголовки ответа с токеном авторизации. Теперь вопрос в том, как я могу использовать этот токен для реализации будущих запросов? :
$.ajax({
type: 'POST',
url: "/login",
data: JSON.stringify({
"username" : "linda",
"password" : "password",
}),
success: function(response) {
// some logic
},
error: function(e) {
console.log(e);
},
processData: false,
//dataType: "json",
contentType: "application/json; charset=utf-8"
});