【转载】spring-security-oauth2(二十五) Spring Security授权简介

授权概念

权限系统通常要解决认证和授权

  • 认证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。
  • 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。

前面我们分析的都是认证,即你是谁问题?

这篇我们来分析你能做什么的问题。

授权分析

权限是某个资源能否杯用户访问,而并不是能否显示的问题。

权限场景

通常公司的系统分对外系统 权限场景比较简单,而内部管理系统权限场景比较复杂(业务及需求经常变动)

 

权限控制

权限控制是基于用户-角色-权限这套体系,这个我么后面详细介绍。其实我们前面的浏览器项目已经有权限控制了我们再来看下

com.rui.tiger.auth.browser.config.BrowserSecurityConfig#configure


 
 
  1. /**
  2. * 核心配置
  3. * @param http
  4. * @throws Exception
  5. */
  6. @Override
  7. protected void configure(HttpSecurity http) throws Exception {
  8. /**
  9. * 表单密码配置
  10. */
  11. applyPasswordAuthenticationConfig(http);
  12. http
  13. .apply(captchaSecurityConfig)
  14. .and()
  15. .apply(smsAuthenticationSecurityConfig)
  16. .and()
  17. .apply(tigerSpringSocialConfigurer)
  18. .and()
  19. .rememberMe()
  20. .tokenRepository(persistentTokenRepository())
  21. .tokenValiditySeconds(securityProperties.getBrowser().getRemberMeSeconds())
  22. .userDetailsService(userDetailsService)
  23. .and()
  24. .sessionManagement()
  25. .invalidSessionStrategy(invalidSessionStrategy) //session失效策略
  26. .maximumSessions(securityProperties.getBrowser().getSession().getMaximumSessions()) //最大session并发数
  27. .maxSessionsPreventsLogin(securityProperties.getBrowser().getSession().isMaxSessionsPreventsLogin()) //true达到并发数后阻止登录,false 踢掉之前的登录
  28. .expiredSessionStrategy(sessionInformationExpiredStrategy) //并发策略
  29. .and()
  30. .and()
  31. .logout()
  32. .logoutUrl( "/loginOut") //默认logout
  33. //.logoutSuccessUrl("") url和Handler只能配置一个
  34. .logoutSuccessHandler(tigerLogoutSuccessHandler)
  35. .deleteCookies( "JSESSIONID") //清楚cook键值
  36. .and()
  37. .authorizeRequests()
  38. .antMatchers(
  39. SecurityConstants.DEFAULT_UNAUTHENTICATION_URL, //权限认证
  40. SecurityConstants.DEFAULT_LOGIN_PROCESSING_URL_MOBILE, //手机
  41. securityProperties.getBrowser().getLoginPage(), //登录页面
  42. SecurityConstants.DEFAULT_VALIDATE_CODE_URL_PREFIX+ "/*", // /captcha/* 验证码放行
  43. securityProperties.getBrowser().getSignupUrl(),
  44. //这个第三方自定义权限 后续抽离出去 可配置
  45. securityProperties.getBrowser().getLoginOut(),
  46. "/user/regist",
  47. "/index.html",
  48. securityProperties.getBrowser().getSession().getInvalidSessionUrl())
  49. .permitAll()
  50. //底层会拼接ROLE_ADMIN
  51. .antMatchers( "/user").hasRole( "ADMIN")
  52. //restful风格匹配
  53. .antMatchers(HttpMethod.GET, "/user/*").hasRole( "USER")
  54. .anyRequest()
  55. .authenticated()
  56. .and()
  57. .csrf().disable();
  58. }

用户服务

这里只是模拟,通常用户的账号密码及相关权限信息,都是配置在数据中的。


 
 
  1. private SocialUserDetails buildUser(String userId) {
  2. // 根据用户名查找用户信息
  3. //根据查找到的用户信息判断用户是否被冻结
  4. String password = passwordEncoder.encode( "123456");
  5. log.info( "数据库密码是:" + password);
  6. return new SocialUser(
  7. userId,
  8. password,
  9. true,
  10. true,
  11. true,
  12. true,
  13. AuthorityUtils.commaSeparatedStringToAuthorityList( "ROLE_ADMIN,ROLE_USER")
  14. );
  15. }

 

文章转载至:[https://blog.youkuaiyun.com/ahcr1026212/article/details/89855032](https://blog.youkuaiyun.com/ahcr1026212/article/details/89855032)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值