Я работаю над Spring Security, поэтому у меня возникают проблемы при проверке последующих запросов с помощью сгенерированного токена.
Насколько я знаю, когда пользователь вошел в систему и токен был сгенерирован для каждого последующего запроса как я должен проверить токен.
Я в основном имею в виду, что в классе ниже он успешно сгенерировал токен, и я добавил повара ie в ответ только для целей тестирования. Пожалуйста, посмотрите ниже класс.
package com.example.demo;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
public class AuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private AuthenticationManager authenticationManager;
private static final Logger log=Logger.getAnonymousLogger();
public AuthenticationFilter(AuthenticationManager autheticationManager) {
this.setAuthenticationManager(autheticationManager);
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException {
/*
* List list = new ArrayList<GrantedAuthority>(); GrantedAuthority auth = ()-> {
* return "USER"; };
*
* list.add(auth.getAuthority());
*/
return getAuthenticationManager().authenticate(
new UsernamePasswordAuthenticationToken("user", "password"));
}
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
Authentication authResult) throws IOException, ServletException {
response.addHeader("Token", "Logged in");
HttpSession session = request.getSession();
Cookie cookies = new Cookie("token", "True");
cookies.setMaxAge(60);
session.setAttribute("cookie", cookies);
log.log(Level.INFO, "Authentication Successull Cookies has been added to the session Context");
}
}
Теперь, дальнейшие запросы должны будут go через метод doFilterInternal, если я не ошибаюсь ?. Итак, отсюда я могу проверить токен для аутентификации запроса и решу, должен он пройти или нет. Чтобы переопределить этот метод, мне нужно будет расширить класс OncePerRequestFilter или BasicAuthenitcation, но в java мы ограничены и можем расширять только один класс.
Если мы собираемся реализовать интерфейс и интерфейс мы можем реализовать класс, тогда это также невозможно, потому что требуемые классы являются абстрактными, поэтому реализовать их в интерфейсе будет невозможно.
Если мы создадим другой класс для реализации этого класса с помощью метода doFilterInternal, тогда нам нужно будет добавить это как фильтр в класс WebSecurityConfig, но, как мы все знаем, он может добавить только один фильтр.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/**")
.hasRole("USER").and().formLogin()
.and().addFilter(getAuthenticationFilter());
}
Так что я не понимаю, что делать на этом этапе. пожалуйста, предложите что-нибудь.