一、前言
在大型的信息管理系统中,经常涉及到权限管理系统
下面来个 demo,很多复杂的系统的设计都来自它
代码已经放到github上了,地址:https://github.com/larger5/shiro_urp.git
2018.4.3 版本0.5 在 SpringBoot 中使用 Shiro+MySQL 做登录拦截
2018.4.6 版本1.0 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统
以后继续更新,如用户、角色、权限 CRUD 等,真正做到所谓的权限管理系统
二、数据库表的设计
下面使用 SpringBoot + JPA 的,自动生成如下的表
用户角色多对多、角色权限多对多,设计一个通用的权限系统(无论初衷是一个用户多个角色还是一个角色)
三、效果
说明:
①UI:
使用了 LayUI 简单优化一下界面
②角色所含权限:
p:select
ip:select、insert
vip:select、insert、update、delete
③权限:
select
insert
update
delete
以使用 itaem (VIP)为例
图解:
有:① select、insert、update、delete 权限 ② vip 角色
无:ip角色、p角色,点击后都是没有反应的
四、代码(github 平台上看)
① Controller(重点)
package com.cun.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.subject.Subject;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cun.entity.User;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/login")
public Map login(@Valid User user, BindingResult bindingResult, HttpSession session) {
Map map = new HashMap();
// 1、JSR303
if (bindingResult.hasErrors()) {
map.put("success", false);
map.put("errorInfo", bindingResult.getFieldError().getDefaultMessage());
return map;
}
// 2、Shiro
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(user.getUserName(), user.getPassword());
try {
subject.login(token);
map.put("success", true);
return map;
} catch (Exception e) {
e.printStackTrace();
map.put("success", false);
map.put("errorInfo", "用户名或者密码错误!");
return map;
}
}