基于SSM+Shiro+Bootstrap实现用户权限管理系统
Posted 小王Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SSM+Shiro+Bootstrap实现用户权限管理系统相关的知识,希望对你有一定的参考价值。
基于SSM+Shiro+Bootstrap实现用户权限管理系统
引言
本篇博文基于SSM+Shiro实现用户权限管理系统,每位用户只可访问指定的页面,具体需求如下
需求
用户账号的增删改查功能 权限包括: 系统模块操作权限(system),财务模块操作权限(finance),考勤模块操作权限(checkon), 每个用户都可能拥有0或多个权限,在新增和编辑用户的时候,可以多选权限。 系统模块:包括用户账号管理功能。 财务模块:为了开发简化,只要做出静态的页面即可,不要真的有财务模块。 考勤模块:同财务模块。
效果图
功能细节
- 技术栈:Maven+SSM+Shiro + Bootstarp
- 操作者必须登录,且拥有system权限才可以访问system/* 下的所有页面和功能
- 操作者必须登录,且拥有 finance 权限才可以访问 finance/* 下的所有页面和功能
- 操作者必须登录,且拥有 checkon 权限才可以访问 checkon/* 下的所有页面和功能
- 用户的新增、编辑、删除、列表功能,都属于 system/* 下面的页面和功能。
- 操作者如果未登录,会被踢到登录页面
- 操作者如果访问需要权限的页面,但没有权限,会被踢到 noauthor 页面
- 用户新增和编辑页面,必须验证登录密码和二次验证密码相同
- 用户名必须是唯一的
- 用户新增的时候必须输入用户名
- 用户编辑的时候,用户名为只读的
- 用户编辑的时候,可以不输入密码
- 用户编辑页面打开的时候,不要回显密码
- 用户新增的时候必须输入登录密码
- 用户编辑回显的时候必须回显昵称和拥有权限
分页采用PageHelper插件
数据表准备
用户表:t_shiro_user
CREATE TABLE `t_shiro_user` (
`noid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`userpwd` varchar(32) NOT NULL,
`nickname` varchar(32) DEFAULT NULL,
PRIMARY KEY (`noid`),
UNIQUE KEY `uniq_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
权限表:t_shiro_permission
CREATE TABLE `t_shiro_permission` (
`noid` int(11) NOT NULL AUTO_INCREMENT,
`permission_code` varchar(32) NOT NULL COMMENT '权限代号',
`permission_describe` varchar(32) NOT NULL COMMENT '权限描述',
PRIMARY KEY (`noid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
权限代号是开发的时候需要用的字符串,一般都是英文字符串,比如“system”。 权限描述是给最终软件使用方(操作者)看的,比如 “系统模块操作权限” 权限数据是固定的,这些数据是设计时的,即在开发前就确定的东西,不会在项目运行阶段再变化;如果需要变化就需要重新开发相关的代码。
权限表的数据如下:
INSERT INTO `t_shiro_permission` (`permission_code`, `permission_describe`) VALUES ('system', '系统模块操作权限');
INSERT INTO `t_shiro_permission` (`permission_code`, `permission_describe`) VALUES ('finance', '财务模块操作权限');
INSERT INTO `t_shiro_permission` (`permission_code`, `permission_describe`) VALUES ('checkon', '考勤模块操作权限');
pom文件
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<!-- mybatis 相关的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- shiro依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.8.0</version>
</dependency>
<!-- 分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8087</port>
<path>/ssm_shiro</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
项目结构
核心源码
MyRealm自定义权限类,该类实现了用户认证与授权
@Component
public class MyRealm extends AuthorizingRealm
@Autowired
private ShiroUserMapper shiroUserMapper;
@Autowired
private UserPermissionMapper userPermissionMapper;
/**
* 自定义授权方法
* 思路:根据PrincipalCollection对象获取用户名,根据用户名查询对象,
* 查询该用户在数据表中所对应的权限,并转换为set集合,存入SimpleAuthorizationInfo对象并返回
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection)
//获取用户名
String username = (String) principalCollection.getPrimaryPrincipal();
基于SSM实现会议室预约管理系统JavaEE框架Bootstrap HTML5 jQuery SpringMVC maven mybatis shiro ehcache java web SSH SSM
java大数据 高并发 系统框架 springmvc mybatis Bootstrap html5 shiro maven SSM SSH
java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5
java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5