Я использую несколько классов конфигурации безопасности
@Configuration
@EnableWebSecurity
@Slf4j
public class SecurityConfig {
@Configuration
@Order(2)
public static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
return new CustomUserDetailsService();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder());
}
@Autowired
private LoggingAccessDeniedHandler accessDeniedHandler;
// @formatter:off
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/login", "/logout" , "/user/forgot-pwd" , "/user/forgot-pwd/success" ,"/swagger-ui.html").permitAll()
.antMatchers("/css/**", "/js/**", "/images/**", "/favicon.ico", "/webjars/**", "/vendor/**", "/error/**").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
.loginProcessingUrl("/authenticate")
.loginPage("/login")
.defaultSuccessUrl("/studylist")
.failureUrl("/login?error=true")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login?logout=true")
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID")
.and()
.exceptionHandling()
.accessDeniedHandler(accessDeniedHandler)
.and()
.csrf()
.and()
.sessionManagement()
.invalidSessionUrl("/login")
.sessionAuthenticationErrorUrl("/login")
.and()
.headers()
.frameOptions()
.sameOrigin();
}
// @formatter:on
}
@Configuration
@Order(1)
public static class RestSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api/**").addFilter(jWTAuthorizationFilter()).httpBasic();
}
@Bean
public JWTAuthorizationFilter jWTAuthorizationFilter() {
JWTAuthorizationFilter filter = null;
try {
filter = new JWTAuthorizationFilter(authenticationManager());
} catch (Exception e) {
e.printStackTrace();
}
return filter;
}
}
Я хочу применить JWTAuthorizationFilter только для URL / api / **, присутствующих в RestSecurityConfig.Но в приведенном выше случае он применяется также для всех antMatchers, присутствующих в WebSecurityConfig.Как избежать этого?
Примечание:
1) Я также пытался использовать FilterRegistrationBean и отключил его на false, но я столкнулся с той же проблемой.Я ссылался на эту ссылку, которая говорит использовать FilterRegistrationBean.
http://blog.florian -hopf.de / 2017/08 / spring-security.html
2) Яиспользуя жестко закодированный токен, поэтому я не добавил ни одного фильтра аутентификации в RestSecurityConfig.
Чего мне не хватает?
Заранее спасибо !!!!