SpringSecurity匹配规则介绍
SpringSecurity匹配规则
一 URL匹配
requestMatchers() 配置一个request Mather数组,参数为RequestMatcher 对象,其match 规则自定义,需要的时候放在最前面,对需要匹配的的规则进行自定义与过滤
authorizeRequests() URL权限配置
antMatchers() 配置一个request Mather 的 string数组,参数为 ant 路径格式, 直接匹配url
anyRequest 匹配任意url,无参 ,最好放在最后面
二 保护URL
authenticated() 保护UrL,需要用户登录 permitAll() 指定URL无需保护,一般应用与静态资源文件 hasRole(String role) 限制单个角色访问,角色将被增加 “ROLE_” .所以”ADMIN” 将和 “ROLE_ADMIN”进行比较. 另一个方法是hasAuthority(String authority) hasAnyRole(String… roles) 允许多个角色访问. 另一个方法是hasAnyAuthority(String… authorities) access(String attribute) 该方法使用 SPEL, 所以可以创建复杂的限制 例如如access("permitAll"), access("hasRole('ADMIN') and hasIpAddress('123.123.123.123')") hasIpAddress(String ipaddressExpression) 限制IP地址或子网
三 登录login
formLogin() 基于表单登录 loginPage() 登录页 defaultSuccessUrl 登录成功后的默认处理页 failuerHandler登录失败之后的处理器 successHandler登录成功之后的处理器 failuerUrl登录失败之后系统转向的url,默认是this.loginPage + "?error"
四 登出logout
logoutUrl 登出url , 默认是/logout, 它可以是一个ant path url logoutSuccessUrl 登出成功后跳转的 url 默认是"/login?logout" logoutSuccessHandler 登出成功处理器,设置后会把logoutSuccessUrl 置为null 下面的代码片段就不会拦截/user,因为只会匹配"/api/**"
@Configuration @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.requestMatchers().antMatchers("/api/**") .and().authorizeRequests().antMatchers("/user","/api/user").authenticated() .anyRequest().authenticated() .and().formLogin().loginPage("/login"); //需要人证 // http.authorizeRequests().antMatchers("/user").hasRole("Admin"); // .and().formLogin().loginPage("/login"); //api请求都不需要权限认证 // http.authorizeRequests().antMatchers("/api").permitAll(); // data/** Get请求不需要权限人证 // http.authorizeRequests().antMatchers(HttpMethod.GET,"/data/**").permitAll(); } }
作者:IT民工郑小江
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。