请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 156|回复: 0

Spring Boot2.0连载(49)-- Spring Security入门2

[复制链接]
发表于 2018-6-10 21:19:28 | 显示全部楼层 |阅读模式
更多Spring Boot2.0的知识敬请期待疯狂软件著作《Spring Boot企业应用实战》上市


用户授权
Spring Security是通过configure(HttpSecurity http) 完成用户授权的。
HttpSecurity的authorizeRequests()方法有多个子节点,每个macher按照它们的声明顺序执行,指定用户可以访问的多个URL模式。
  • antMatchers使用Ant风格匹配路径。
  • regexMatchers使用正则表达式匹配路径。
在匹配了请求路径后,可以针对当前用户的信息对请求路径进行安全处理。
Spring Security提供的安全处理方法如下:

方法    用途
  • anyRequest    匹配所有请求路径
  • access(String)    Spring EL表达式结果为true时可以访问
  • anonymous()    匿名可以访问
  • denyAll()    用户不能访问
  • fullyAuthenticated()    用户完全认证可以访问(非remember-me下自动登录)
  • hasAnyAuthority(String…)    如果有参数,参数表示权限,则其中任何一个权限可以访问
  • hasAnyRole(String…)    如果有参数,参数表示角色,则其中任何一个角色可以访问
  • hasAuthority(String…)    如果有参数,参数表示权限,则其权限可以访问
  • hasIpAddress(String)    如果用参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
  • hasRole(String)    如果有参数,参数表示角色,则其角色可以访问
  • permitAll()    用户可以任意访问
  • rememberMe()    允许通过remember-me登录的用户访问
  • authenticated()    用户登录后可访问

示例代码如下:
  1. @Override
  2. protected void configure(HttpSecurity http) throws Exception {
  3.     http.authorizeRequests()
  4. .antMatchers("/login").permitAll()
  5.     .antMatchers("/", "/home").hasRole("USER")
  6.     .antMatchers("/admin/**"). hasAnyRole("ADMIN", "DBA")
  7.     .anyRequest().authenticated();
  8. }
复制代码


以上代码解释如下:
  • http.authorizeRequests():开始请求权限配置。
  • antMatchers("/login").permitAll():请求匹配“/login”,所有用户都可以访问。
  • antMatchers("/", "/home").hasRole("USER"):请求匹配“/”和“/home”,拥有“ROLE_USER”角色的用户可访问。
  • antMatchers("/admin/**"). hasAnyRole("ADMIN", "DBA"):请求匹配“/admin/**”,拥有“ROLE_ ADMIN”或“ROLE_DBA”角色的用户可以访问。
  • anyRequest().authenticated():其余所有的请求都需要认证(用户登录)之后才可以访问。
HttpSecurity还可以设置登录的行为,示例代码如下:
  1. @Override
  2. protected void configure(HttpSecurity http) throws Exception {
  3.     http.authorizeRequests()
  4.     .antMatchers("/login").permitAll()
  5.     .antMatchers("/", "/home").hasRole("USER")
  6.     .antMatchers("/admin/**").hasAnyRole("ADMIN", "DBA")
  7.     .anyRequest().authenticated()
  8.     .and()
  9.     .formLogin()
  10. .loginPage("/login")
  11.     .usernameParameter("loginName").passwordParameter("password")
  12.     .defaultSuccessUrl("/success")
  13.     .failureUrl("/login?error")
  14.     .and()
  15.     .logout()
  16. .permitAll()
  17.     .and()
  18.     .exceptionHandling().accessDeniedPage("/accessDenied");
  19. }
复制代码


以上代码的解释如下:
  • formLogin():开始设置登录操作。
  • loginPage("/login"):设置登录页面的访问地址。
  • usernameParameter("loginName").passwordParameter("password"):登录时接收传递的参数 “loginName”的值作为用户名,接收传递参数的“password”的值作为密码。
  • defaultSuccessUrl("/success"):指定登录成功转向的页面。
  • failureUrl("/login?error"):指定登录失败后转向的页面和传递的参数。
  • logout():设置注销操作。
  • permitAll():所有用户都可以访问。
  • exceptionHandling().accessDeniedPage("/accessDenied"):指定异常处理页面。


您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-9-26 10:33 , Processed in 0.270805 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表