Когда мы пытаемся использовать @PreAuthorize, перед вызовом API появляется всплывающее окно SpringSecurity со страницей входа. Нам не нужна эта страница, поскольку у нас есть собственный процесс аутентификации.
Чтобы пропустить эту страницу, мы добавили
@SpringBootApplication( ignore = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class } ) в нашем основном классе.
После этого страница входа была пропущена, но затем все наши API, когда мы их запускали, выдавали ошибку, что в контексте должна присутствовать аутентификация.
Для этого мы внесли следующие изменения
Код: Выделить всё
@Configuration
public class MethodSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable().addFilter(new AuthFilter(authenticationManagerBean())).authorizeRequests().anyRequest().permitAll();
}
}
@Component
public class AuthFilter implements Filter {
private AuthenticationManager authenticationManager;
public AuthFilter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain)
throws IOException, ServletException {
final String authorizationHeader = ((HttpServletRequest) request).getHeader("Authorization");
System.out.println("===========Filter called================");
final Authentication authentication = authenticationManager
.authenticate(SecurityContextHolder.getContext().getAuthentication());
System.out.println("===========Authentication================"+authentication);
if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)
&& authentication.isAuthenticated()) {
// set authentication in security context holder
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterchain.doFilter(request, response);
}
}
Я пробовал многими другими способами, но bean-компонент не внедряется в фильтре
Можете ли вы это прокомментировать?
Подробнее здесь: https://stackoverflow.com/questions/740 ... nager-bean
Мобильная версия