Я пытаюсь аутентифицировать пользователя с PreAuthenticatedAuthenticationToken
в AbstractPreAuthenticatedProcessingFilter
.В MyPreAuthenticationFilter
я делаю это так:
@Override
public Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
String session = getSession(request); // not JSESSIONID, custom session
UserInfo user = getUser(session); // custom user object
Authentication auth = new PreAuthenticatedAuthenticationToken(
user,
session,
Arrays.asList(
new SimpleGrantedAuthority("ROLE_USER")
)
);
SecurityContextHolder.getContext().setAuthentication(auth);
return userInfo;
}
и вот мой SecurityConfig
@Autowired
AuthenticationManager authenticationManager;
@Bean
public MyPreAuthenticationFilter preAuthenticationFilter() {
return new MyPreAuthenticationFilter(authenticationManager);
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.addFilterBefore(preAuthenticationFilter(), BasicAuthenticationFilter.class)
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.antMatcher("/login/oauth/authorize")
.authorizeRequests().anyRequest().authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(new OAuth2EntryPoint("/login?path=/login/oauth/authorize"))
.and()
.csrf().disable();
}
Я пытаюсь защитить /login/oauth/authorize
с помощью пользовательской страницы входа, размещенной на хостена /login
, который перенаправляет на параметр path
.Однако при доступе к этому URL я обнаружил этот журнал в конце цепочки фильтров Spring Security
org.springframework.security.authentication.AnonymousAuthenticationToken@9055c2bc: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS
Почему MyPreAuthenticationFilter
не аутентифицирует Spring SecurityContext?