首页 > 解决方案 > 仅针对特定 url 的带有过滤器的 Spring 安全性

问题描述

我希望仅针对带有密钥的特定 URL 触发安全性,我认为正在发生的事情是我绕过了 spring 安全性,但是扩展 BasicAuthenticationFilter 的附加授权过滤器正在触发每个 url 如何将 url 设置为添加的 BasicAuthenticationFilter还。我正在实施 Jwt 令牌。

这是我的配置:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserServiceImpl userService;
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(new BCryptPasswordEncoder());
    }



    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
                .and()
                .csrf()
                .disable().authorizeRequests()
                .antMatchers("**/auth/**").authenticated()
                .anyRequest().permitAll()
                .and()
                .addFilter(new AuthorizationFilter(authenticationManager()))
                .addFilter(authenticationFilter())
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);


        http.headers().cacheControl();
    }
    public AuthenticationFilter authenticationFilter() throws Exception{
        final AuthenticationFilter authenticationFilter  = new AuthenticationFilter(authenticationManager());
        authenticationFilter.setFilterProcessesUrl("/login");
        return authenticationFilter ;
    }

}

标签: springsecurityjwt

解决方案


选项

  1. 扩展BasicAuthenticationFilter并且作为继承的结果,您可以编写自己的身份验证方法,在运行时来自子类的方法将从 Spring 安全方面考虑。
  2. 在那里扩展AbstractAuthenticationFilter并进行所需的过滤。

推荐阅读