今天给大家分享shiro授权,其实就是不过5表联查
数据库分析
首先,我们要获取登陆用户权限与角色的信息,可以进行多表联查。
根据用户名获取当前登陆用户角色信息

SQL语句
select t1.role_name from t_sys_role t1
inner join t_sys_user_role t2 on t1.role_id=t2.role_id
inner join t_sys_user t3 on t2.user_id=t3.user_id
where t3.username='zs
根据用户名获取当前登陆用户权限信息 
SQL语句
select t5.permission from t_sys_user t1
inner join t_sys_user_role t2 on t1.user_id=t2.user_id
inner join t_sys_role t3 on t2.role_id=t3.role_id
inner join t_sys_role_permission t4 on t3.role_id=t4.role_id
inner join t_sys_permission t5 on t4.permission_id=t5.permission_id
where t1.username='ls'
实现代码
登陆页面


mapper.xml


mapper层要加注解@Repository,spring框架才会识别这个类是mapper层
Service层要加注解@Service,spring框架才会识别这个类是Service层

- /**
- * 授权
- * @param principalCollection
- * @return
- */
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
- //获取登陆的用户名
- String username = principalCollection.getPrimaryPrincipal().toString();
-
- Set
roles = userService.RolesName(username); - Set
permission = userService.PermissionName(username); - //Reaml处理结果集,返回给安全管理器
- SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
- //设置权限与角色
- info.setRoles(roles);
- info.setStringPermissions(permission);
-
- return info;
- }
Controller实现用户登陆

- @Controller
- public class UserController {
-
- @RequestMapping("user/login")
- public String login(User user, Model model) {
- Subject subject = SecurityUtils.getSubject();
-
- UsernamePasswordToken token = new UsernamePasswordToken(user.getUserName(),user.getPassword());
-
- try {
- subject.login(token);
- } catch (UnknownAccountException | LockedAccountException e) {
- model.addAttribute("message", e.getMessage());
- return "login";
- } catch (AuthenticationException e) {
- e.printStackTrace();
- model.addAttribute("message", "密码错误");
- return "login";
- }
-
- return "index";
- }
- }
首页
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@taglib prefix="s" uri="http://shiro.apache.org/tags" %>
- <html>
- <head>
- <title>Titletitle>
- head>
- <body>
- <h3>首页h3>
-
- <s:hasPermission name="bookmanager:book:add">
- <li><a href="#">书本查询a>li>
- s:hasPermission>
- <s:hasPermission name="bookmanager:book:add">
- <li><a href="#">书本新增a>li>
- s:hasPermission>
- <s:hasPermission name="bookmanager:book:edit">
- <li><a href="#">书本修改a>li>
- s:hasPermission>
- <s:hasPermission name="system:dict:del">
- <li><a href="#">书本删除a>li>
- s:hasPermission>
-
- <a href="<%=request.getContextPath()%>/system/dict/view">查询权限a>
- body>
- html>
我们登陆的用户ls只有删除的权限,所以其他的不会显示在页面上。
必须要先引入标签库
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>