Я сделал весеннюю страницу, используя Spring Security.Когда я пытаюсь получить доступ к любому URL-адресу внутри этой страницы, если сеанс не установлен, он перенаправит вас на страницу входа: / login.Это нормально, но теперь я сделал простой http rest api внутри этой сети.Что мне нужно, если я пытаюсь получить доступ к любому URL-адресу внутри / api / **, просто отбросьте 401 вместо отправки HTTP-перенаправления для входа в систему.
Я создал фильтр с preHandle:
открытый класс BusinessKeyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null && auth.isAuthenticated()
&&
// when Anonymous Authentication is enabled
!(auth instanceof AnonymousAuthenticationToken)) {
// other stuf ....
}
} else {
if (request.getRequestURI().startsWith("/api")) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return false;
}
}
return true;
}
}
Но в этом случае URI запроса уже / login
Моя конфигурация:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and().sessionManagement()
.invalidSessionUrl("/login?invalid")
.and().csrf().disable().formLogin()
.loginPage("/login")
.failureHandler(customAuthenticationFailureHandler)
.defaultSuccessUrl("/loggedIn")
.usernameParameter("email")
.passwordParameter("password")
.successHandler(authenticationSuccessHandler)
.and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/").and().exceptionHandling()
.accessDeniedPage("/access-denied")
;
}