是撒大大大

  1. package realm;
  2. ?
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. ?
  6. import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
  7. import org.apache.commons.lang3.builder.ToStringStyle;
  8. import org.apache.shiro.SecurityUtils;
  9. import org.apache.shiro.authc.AuthenticationException;
  10. import org.apache.shiro.authc.AuthenticationInfo;
  11. import org.apache.shiro.authc.AuthenticationToken;
  12. import org.apache.shiro.authc.SimpleAuthenticationInfo;
  13. import org.apache.shiro.authc.UsernamePasswordToken;
  14. import org.apache.shiro.authz.AuthorizationException;
  15. import org.apache.shiro.authz.AuthorizationInfo;
  16. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  17. import org.apache.shiro.realm.AuthorizingRealm;
  18. import org.apache.shiro.session.Session;
  19. import org.apache.shiro.subject.PrincipalCollection;
  20. import org.apache.shiro.subject.Subject;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. ?
  23. import utils.StrUtils;
  24. ?
  25. import com.jxzg.mvc.web.entitys.user.Role;
  26. import com.jxzg.mvc.web.entitys.user.RoleRight;
  27. import com.jxzg.mvc.web.entitys.user.User;
  28. import com.jxzg.mvc.web.service.user.IUserManager;
  29. ?
  30. public
    class MyRealm extends AuthorizingRealm {
  31. ?
  32. [email protected]
  33. ???private IUserManager userManager;
  34. ?
  35. ???/**
  36. ????* 为当前登录的Subject授予角色和权限
  37. ????* @see 经测试:本例中该方法的调用时机为用户登录后,被调用
  38. ????*/
  39. [email protected]
  40. ???protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  41. ??????// 获取当前登录的用户名,等价于(String)principals.fromRealm(this.getName()).iterator().next()
  42. ??????String currentUsername = (String) super.getAvailablePrincipal(principals);
  43. ??????List<String> roleList = new ArrayList<String>();
  44. ??????List<String> permissionList = new ArrayList<String>();
  45. ??????// 从数据库中获取当前登录用户的详细信息
  46. ??????User user = userManager.getByUsername(currentUsername);
  47. ??????if (null != user) {
  48. ?????????// 实体类User中包含有用户角色的实体类信息
  49. ?????????if (null != user.getRole()) {
  50. ????????????// 获取当前登录用户的角色
  51. ????????????Role role = user.getRole();
  52. ????????????roleList.add(role.getName());
  53. ????????????//如果是超级管理员直接赋予所有权限
  54. ????????????if(role.getName().equals("admin")){
  55. ???????????????permissionList.add("user");
  56. ???????????????permissionList.add("school");
  57. ????????????}
  58. ?
  59. ????????????else{
  60. ???????????????// 实体类Role中包含有角色权限的实体类信息
  61. ???????????????if (null != role.getRights() && role.getRights().size() > 0) {
  62. ??????????????????// 获取权限
  63. ??????????????????for (RoleRight pmss : role.getRights()) {
  64. ?????????????????????if(pmss.isFlag()){
  65. ????????????????????????if (!StrUtils.isNullOrEmpty(pmss.getRight())) {
  66. ???????????????????????????permissionList.add(pmss.getRight().getName());
  67. ????????????????????????}
  68. ?????????????????????}
  69. ??????????????????}
  70. ???????????????}
  71. ????????????}
  72. ?????????}
  73. ??????} else {
  74. ?????????throw
    new AuthorizationException();
  75. ??????}
  76. ??????// 为当前用户设置角色和权限
  77. ??????SimpleAuthorizationInfo simpleAuthorInfo = new SimpleAuthorizationInfo();
  78. ??????simpleAuthorInfo.addRoles(roleList);
  79. ??????simpleAuthorInfo.addStringPermissions(permissionList);
  80. ??????return simpleAuthorInfo;
  81. ???}
  82. ?
  83. ???/**
  84. ????* 验证当前登录的Subject
  85. ????* @see 经测试:本例中该方法的调用时机为LoginController.login()方法中执行Subject.login()时
  86. ????*/
  87. [email protected]
  88. ???protected AuthenticationInfo doGetAuthenticationInfo(
  89. ?????????AuthenticationToken authcToken) throws AuthenticationException {
  90. ??????// 获取基于用户名和密码的令牌
  91. ??????// 实际上这个authcToken是从LoginController里面currentUser.login(token)传过来的
  92. ??????// 两个token的引用都是一样的
  93. ??????UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
  94. ??????System.out.println("验证当前Subject时获取到token为"
  95. ????????????+ ReflectionToStringBuilder.toString(token,
  96. ??????????????????ToStringStyle.MULTI_LINE_STYLE));
  97. ??????User user = userManager.getByUsername(token.getUsername());
  98. ??????if (null != user) {
  99. ?????????AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(
  100. ???????????????user.getUserName(), user.getPass(), user.getNickName());
  101. ?????????this.setSession("currentUser", user);
  102. ?????????return authcInfo;
  103. ??????} else {
  104. ?????????return
    null;
  105. ??????}
  106. ???}
  107. ?
  108. ???/**
  109. ????* 将一些数据放到ShiroSession中,以便于其它地方使用
  110. ????* @see 比如Controller,使用时直接用HttpSession.getAttribute(key)就可以取到
  111. ????*/
  112. ???private
    void setSession(Object key, Object value) {
  113. ??????Subject currentUser = SecurityUtils.getSubject();
  114. ??????if (null != currentUser) {
  115. ?????????Session session = currentUser.getSession();
  116. ?????????if (null != session) {
  117. ????????????session.setAttribute(key, value);
  118. ?????????}
  119. ??????}
  120. ???}
  121. ?
  122. }

?

?

时间: 2024-10-05 15:28:37

是撒大大大的相关文章

撒大时代

撒大叔大叔的撒旦撒旦撒旦 撒大时代,布布扣,bubuko.com

自由从摇篮开始 ——杨支柱

“大教育时代”论坛——http://www.wtyzy.net 时评 滑稽的校规 重庆某重点大学女学生李某因与同校男生发生性关系怀孕,被检查身体的校医院医告密.学校强令李某的男友张某写出他与李某发生性关系的时间.地点和次数,然后以“品行恶劣,道德败坏”为由,根据校规勒令李某和张某退学.李某和张某以学校侵犯其隐私权为由,将学校告上法庭. ——侵犯学生权利 符合法定婚龄的年轻教师可以结婚,但学生不准:学生考试抄袭要开除或留校察看,但教师考试舞弊或抄袭他人文章却通常无人问罪.即使被媒体揭露后处分也是很

Android 时间轴

效果图: 数据是随便填的,显得有点乱,但是不影响效果.实现方面主要是用ListView来实现,主要是根据ListView的item位置与上一条数据进行比较,来控制时间的显示隐藏效果.思路很简单,下面看代码实现: 首先是页面的整体布局,很简单,就一个ListView: res/layout/activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

OSChina 周四乱弹 —— 人生处处是深坑

当年说要一起建设大深圳的小伙伴们陆陆续续地回老家了,而且他们的理由都是一样的: @梦朝思夕:问题是钱没有赚足 也没过到想要的生活 你们身边有没有这样的朋友呢?生活还是要积极地去面对,不要以为自己碰到点挫折就能看清生活啊 生活处处都是坑,比如说老公坑老婆的 @小编辑:我:老公,你嫌我丑不? 本以为老公会说:宝贝一点都不丑. 结果瞅了瞅我扔下俩字:不嫌... 老婆坑老公的 和我老公吵架,回娘家,现在俺学聪明了,什么带存折,衣服的都弱爆了. 我把空调遥控,电视机遥控,电脑设上开机密码,wifi密码改掉

怎么才能无脑的理解伤心之地C++

大概撒的发生大符合公司打饭撒大睡zhan.renren.com/123654111?gid=3602888498061054291zhan.renren.com/123654111?gid=3602888498061054290zhan.renren.com/123654111?gid=3602888498061054289zhan.renren.com/123654111?gid=3602888498061054288zhan.renren.com/123654111?gid=36028884

JAVA之后习惯了c++

的是该撒大放送的分公司的费是的大师傅segmentfault.com/bookmark/1230000000983930segmentfault.com/bookmark/1230000000983926segmentfault.com/bookmark/1230000000983923segmentfault.com/bookmark/1230000000983921segmentfault.com/bookmark/1230000000983919segmentfault.com/bookm

有趣的前端题目,看了不懊悔

今天在前端群里面和群友讨论了一下几道自己遇过的前端题目.尽管是小题目,可是还是挺好玩.所以今天还是写下来,和大家分享一下. 1.一道大概4年前遇到的题目,知识点简单,可是新鲜又好玩. 题目:有一个div 宽和高都是250px. 仅仅要往div里面加随意的四个div,里面的div宽和高都会是原来50%.分别在左右上下:随意加div.就会向四个角延伸. 同一时候.整个div是垂直水平居中浏览器. 例如以下图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb

有趣的前端题目,看了不后悔

今天在前端群里面和群友讨论了一下几道自己遇过的前端题目,虽然是小题目,但是还是挺好玩.所以今天还是写下来,和大家分享一下. 1.一道大概4年前遇到的题目,知识点简单,但是新奇又好玩. 题目:有一个div 宽和高都是250px: 只要往div里面加任意的四个div,里面的div宽和高都会是原来50%,分别在左右上下:任意加div,就会向四个角延伸.同时,整个div是垂直水平居中浏览器. 如下图 图解:任意添加div,就分别向4个角延伸 下面是出代码,想试试的同学记得先不看代码啦. <!doctyp

张小龙做微信公众号APP,对自媒体是祸还是福?

1月15日,2018微信公开课PRO版在广州举行,腾讯高级副总裁.微信创始人张小龙现身现场并发表演讲,他宣布了下一步的微信战略:即将推出微信公众号APP,以及恢复赞赏功能,并倾向于赞赏作者等等.此外,张小龙还表示不会做信息流. 一时之间,人们不禁感慨,微信微信"情怀"不在. 有人问何玺,对张小龙做公众号APP,不做信息流有什么看法?何玺的观点是: 一,内容分发(信息流)是门大生意,腾讯必须卡位 5年完成5轮融资,最新估值达300亿美金.7亿用户,每月净增1000万以上用户.2016年广