今天小编给大家分享一下SpringSecurity怎么定义多个过滤器链的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
简介
Spring Security 是 Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。
一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。
一般Web应用的需要进行认证和授权。
而认证和授权也是SpringSecurity作为安全框架的核心功能。
在Spring Security中可以定义多个过滤器链,一个WebSerityConfigurerAdapter的实例就可以配置一个过滤器链,我们只需要配置多个WebSerityConfigurerAdapter的实例即可
可以看到,当请求到达 FilterChainProxy 之后,FilterChainProxy 会根据请求的路径,将请求转发到不同的 过滤器链 上面去,不同的 过滤器链 对应了不同的过滤器,也就是不同的请求将经过不同的过滤器。
@Configuration public class SecurityConfig { @Bean protected UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createuser(User.withUsername("javaboy").password("{bcrypt}$2a$10$Sb1gAUH4wwazfNiqflKZve4Ubh.spJcxgHG8Cp29DeGya5zsHENqi").roles("admin", "aaa", "bbb").build()); manager.createuser(User.withUsername("sang").password("{noop}123").roles("admin").build()); manager.createuser(User.withUsername("吴名氏").password("{MD5}{Wucj/L8wMTMzFi3oBKWsETNeXbMFaHZW9vCK9mahMHc=}4d43db282b36d7f0421498fdc693f2a2").roles("user", "aaa", "bbb").build()); return manager; } @Configuration @Order(1) static class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/foo/**") .authorizeRequests() .anyRequest().hasRole("admin") .and() .csrf().disable(); } } @Configuration @Order(2) static class DefaultWebSecurityConfig2 extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/bar/**") .authorizeRequests() .anyRequest().hasRole("user") .and() .formLogin() .permitAll() .and() .csrf().disable(); } } }
说明:
首先,SecurityConfig 不再需要继承自 WebSecurityConfigurerAdapter了,只是作为一个普通的配置类,加上 @Configuration 注解即可。
提供 UserDetailsService 实例,相当于是我们的数据源。
注意在静态内部类里边,我没有使用 http.authorizeRequests()
开始,http.authorizeRequests() 配置表示该过滤器链过滤的路径是 /。在静态内部类里边,我是用了
http.antMatcher("/bar/") 开启配置,表示将当前过滤器链的拦截范围限定在
/bar/**。所以有的时候authorizeRequests()不能放在第一个位置
注解来标记优先级。数字越大优先级越低。请求会先进入优先级高的过滤器链中。
以上就是“SpringSecurity怎么定义多个过滤器链”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程之家行业资讯频道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。