Spring security ---Filter的使用

本文深入探讨了Spring Security中各种过滤器的作用与配置方法,包括自定义过滤器的实现及在过滤链中的位置设定,为读者提供了全面的安全框架理解。
类名称Namespace Element or Attribute
ChannelProcessingFilterhttp/intercept-url@requires-channel
SecurityContextPersistenceFilterhttp
ConcurrentSessionFiltersession-management/concurrency-control
HeaderWriterFilterhttp/headers
CsrfFilterhttp/csrf
LogoutFilterhttp/logout
XAuthenticationFilterhttp/X509
AbstractPerAuthenticatedProcessingFilterN/A
CasAuthenticationFilter N/A
UsernamePasswordAuthenticationFilterhttp/from-login
BasicAuthenticationFIlterhttp/from-basic
SecurityContextHolderAwareRequestFilterhttp/@servlet-api-provision
JaasAoilntegrationFilterhttp/@jaas-api-provision
RememberMeAuthenticationFilterhttp/remeber-me

AnonymousAuthenticationFilter

http/anonymous

SessionManagementFiltersession-management
ExceptionTranslationFilterhttp
FilterSecurityInterceptorhttp
SwitchUserFIlter

N/A

*****************过滤器的顺序从上到下

自定义过滤器方法:

public class BeforLoginFilter extends GenericFilterBean{

    public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException ServletException{
        //调用Filter 链  .....
        filter.doFilter(servletRequest,servletResponse);
    }
            
}

配置自定义过滤器Filter在Spring Security 过滤链中的位置

protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/user/**").hasRole("USER")
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/user")
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/login");

        // 在 UsernamePasswordAuthenticationFilter 前添加 BeforeLoginFilter
        http.addFilterBefore(new BeforeLoginFilter(), UsernamePasswordAuthenticationFilter.class);

        // 在 CsrfFilter 后添加 AfterCsrfFilter
        http.addFilterAfter(new AfterCsrfFilter(), CsrfFilter.class);
    }

HttpSecurity有三个常用方法来定义Filter 

  •    addFilterBefore(Filter filter,CLass<? extends Filter> beforeFilter) 在beforeFilter之前添加filter
  • addFilterAfter(Filter filter,Class<? extends Filter> afterFilter) 在 afterFilter 之后添加filter
  • addFilterAt(Filter filter, Class<? extends Filter> atFilter) 在atFilter相同的位置添加FIlter ,此Filter 不覆盖Filter
### 查找依赖于 `spring-security-core` 的 Maven 包 为了找到依赖于 `spring-security-core` 的 Maven 包,可以利用 Maven Central Repository 或其他类似的工具来查询这些信息。以下是具体方法: #### 使用 Maven Dependency 插件分析项目中的传递依赖关系 如果已经在本地有一个包含 `spring-security-core` 的项目,则可以通过运行以下命令查看项目的传递依赖项: ```bash mvn dependency:tree ``` 这会显示整个项目的依赖树结构,其中包括哪些库间接引入了 `spring-security-core`[^1]。 #### 利用在线资源查找特定依赖的使用者 Maven 中央仓库提供了反向依赖功能 (Reverse Dependencies),可以直接访问中央存储库页面并输入目标模块名称进行搜索。对于本例来说,可前往地址如下链接寻找相关信息: https://search.maven.org/search?q=tc:spring-security-core 上述 URL 将返回所有声明过直接或者间接依赖该组件的构件列表[^2]。 另外还可以借助像 [ClassGraph](http://classgraph.github.io/) 这样的第三方类扫描器程序来自动生成报告文件;它能够识别出应用程序加载路径下的所有 jar 文件及其内部条目详情表单形式呈现出来供进一步筛选处理之需[^3]。 ```java // Example Code Showing How To Use ClassGraph API In Java Project. import io.github.classgraph.*; try (ScanResult scanResult = new ClassLoaderParser().scan()) { Set<String> jarsDependingOnSpringSecurityCore = scanResult.getAllJars() .stream() .filter(jar -> jar.containsPackage("org.springframework.security.core")) .map(Jar::getPath) .collect(Collectors.toSet()); System.out.println("The following JARs depend on spring-security-core:"); jarsDependingOnSpringSecurityCore.forEach(System.out::println); } catch (IOException e) { throw new RuntimeException(e); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值