JAVA项目实战-shrio框架使用(二)
本节介绍利用shiro框架完成用户模块,角色模块接口
1.数据库实体对象
package com.sf.detectcore.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; @TableName(value = "sys_menu") public class SysMenu implements Serializable { @TableId(type = IdType.AUTO,value = "menu_id") private Long menuId; private String name; private String icon; private Long parentId; private Byte status; private String identity; private static final long serialVersionUID = 1L; public Long getMenuId() { return menuId; } public void setMenuId(Long menuId) { this.menuId = menuId; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon == null ? null : icon.trim(); } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Byte getStatus() { return status; } public void setStatus(Byte status) { this.status = status; } @Override public String toString() { return "SysMenu{" + "menuId=" + menuId + ", name='" + name + '\'' + ", icon='" + icon + '\'' + ", parentId=" + parentId + ", status=" + status + ", identity='" + identity + '\'' + '}'; } }
package com.sf.detectcore.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.List; @TableName(value = "sys_permission") public class SysPermission implements Serializable { @TableId(type = IdType.AUTO,value = "permission_id") private Long permissionId; private String name; private String sn; private String resources; private Long parentId; private Long menuId; private Byte status; /** * 子权限 */ @TableField(exist = false) private List<SysPermission> children; private static final long serialVersionUID = 1L; public Long getPermissionId() { return permissionId; } public void setPermissionId(Long permissionId) { this.permissionId = permissionId; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getSn() { return sn; } public void setSn(String sn) { this.sn = sn == null ? null : sn.trim(); } public String getResources() { return resources; } public void setResources(String resources) { this.resources = resources == null ? null : resources.trim(); } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Long getMenuId() { return menuId; } public void setMenuId(Long menuId) { this.menuId = menuId; } public Byte getStatus() { return status; } public void setStatus(Byte status) { this.status = status; } public List<SysPermission> getChildren() { return children; } public void setChildren(List<SysPermission> children) { this.children = children; } }
package com.sf.detectcore.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; import java.util.Date; import java.util.List; @Data @TableName(value = "sys_role") public class SysRole implements Serializable { @TableId(type = IdType.AUTO,value = "role_id") private Long roleId; private String name; private String remarks; private Byte status; private Date createTime; private Long createId; private Date updateTime; private Long updateId; /** * 角色所拥有的权限id集合 */ @TableField(exist = false) private List<Long> permissionIds; /** * 角色所拥有的权限集合 */ @TableField(exist = false) private List<SysPermission> permissions; private static final long serialVersionUID = 1L; public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks == null ? null : remarks.trim(); } public Byte getStatus() { return status; } public void setStatus(Byte status) { this.status = status; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Long getCreateId() { return createId; } public void setCreateId(Long createId) { this.createId = createId; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public Long getUpdateId() { return updateId; } public void setUpdateId(Long updateId) { this.updateId = updateId; } public List<Long> getPermissionIds() { return permissionIds; } public void setPermissionIds(List<Long> permissionIds) { this.permissionIds = permissionIds; } public List<SysPermission> getPermissions() { return permissions; } public void setPermissions(List<SysPermission> permissions) { this.permissions = permissions; } }
package com.sf.detectcore.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; @TableName(value = "sys_role_permission") public class SysRolePermission implements Serializable { @TableId(type = IdType.AUTO,value = "id") private Long id; private Long roleId; private Long permissionId; private static final long serialVersionUID = 1L; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } public Long getPermissionId() { return permissionId; } public void setPermissionId(Long permissionId) { this.permissionId = permissionId; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", id=").append(id); sb.append(", roleId=").append(roleId); sb.append(", permissionId=").append(permissionId); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]"); return sb.toString(); } }
package com.sf.detectcore.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import java.io.Serializable; import java.util.Date; import java.util.List; @TableName(value = "sys_user") public class SysUser implements Serializable { @TableId(type = IdType.AUTO,value = "user_id") private Long userId; private String name; private String account; @JsonIgnore private String password; private Integer status; private Date createTime; private Long createId; private Date updateTime; private Long updateId; private Long labId; /** * 角色ID集合 */ @TableField(exist = false) private List<Long> roleIds; /** * 角色ID集合 */ @TableField(exist = false) private Long roleId; /** * 角色名字 */ @TableField(exist = false) private String roleName; /** * 实验室名字 */ @TableField(exist = false) private String labName; private static final long serialVersionUID = 1L; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getAccount() { return account; } public void setAccount(String account) { this.account = account == null ? null : account.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Long getCreateId() { return createId; } public void setCreateId(Long createId) { this.createId = createId; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public Long getUpdateId() { return updateId; } public void setUpdateId(Long updateId) { this.updateId = updateId; } public List<Long> getRoleIds() { return roleIds; } public void setRoleIds(List<Long> roleIds) { this.roleIds = roleIds; } public Long getLabId() { return labId; } public void setLabId(Long labId) { this.labId = labId; } public String getLabName() { return labName; } public void setLabName(String labName) { this.labName = labName; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public Long getRoleId() { return roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } }
2.mapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysMenuMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysMenu" > <id column="menu_id" property="menuId" jdbcType="BIGINT" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="icon" property="icon" jdbcType="VARCHAR" /> <result column="parent_id" property="parentId" jdbcType="BIGINT" /> <result column="status" property="status" jdbcType="TINYINT" /> <result column="identity" property="identity" jdbcType="VARCHAR" /> </resultMap> <!-- 插入一条数据 --> <insert id="insert" parameterType="com.sf.detectcore.entity.SysMenu" > <selectKey resultType="java.lang.Long" keyProperty="menuId" order="AFTER" > SELECT LAST_INSERT_ID() </selectKey> insert into m_menu (`name`, icon, parent_id, `status`) values (#{name,jdbcType=VARCHAR}, #{icon,jdbcType=VARCHAR}, #{parentId,jdbcType=BIGINT}, #{status,jdbcType=TINYINT}) </insert> <resultMap type="com.sf.detectcore.entity.SysMenu" id="menuMap"> <!-- 基本属性 --> <id property="menuId" column="menu_id" /> <result property="name" column="name" /> <result property="icon" column="icon" /> </resultMap> <!-- 根据userId查询所有菜单 --> <select id="getMenusByUserId" resultType="com.sf.detectcore.controller.user.model.MenuResponse" parameterType="java.lang.Long"> SELECT m1.menu_id menuId, m1.name name, m1.icon icon,m1.parent_id parentId ,m1.identity FROM sys_menu m1 JOIN sys_permission t1 ON m1.menu_id = t1.menu_id JOIN sys_role_permission t2 ON t1.permission_id = t2.permission_id JOIN sys_role t3 ON t2.role_id = t3.role_id JOIN sys_user_role t4 ON t3.role_id = t4.role_id JOIN sys_user t5 ON t4.user_id = t5.user_id WHERE t5.user_id = #{userId} AND m1.`status` = 0 ORDER BY m1.menu_id ASC </select> <!-- 根据parentId查询二级菜单 --> <select id="getByParentId" resultType="com.sf.detectcore.controller.user.model.MenuResponse" parameterType="java.lang.Long"> select m.menu_id menuId, m.name name, m.icon icon,m.parent_id parentId ,m.identity identity FROM sys_menu m where m.parent_id = #{parentId} </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysPermissionMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysPermission" > <id column="permission_id" property="permissionId" jdbcType="BIGINT" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="sn" property="sn" jdbcType="VARCHAR" /> <result column="resources" property="resources" jdbcType="VARCHAR" /> <result column="parent_id" property="parentId" jdbcType="BIGINT" /> <result column="menu_id" property="menuId" jdbcType="BIGINT" /> <result column="status" property="status" jdbcType="TINYINT" /> </resultMap> <!-- 根据用多个角色id查询拥有的权限--> <select id="getPermissionsByRoles" resultMap="BaseResultMap" parameterType="java.util.List" > SELECT DISTINCT * FROM( SELECT p.* FROM sys_permission p LEFT JOIN sys_role_permission rp ON p.permission_id = rp.permission_id WHERE rp.role_id in <foreach collection="roleIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> AND p.`status` = 0 AND p.sn IS NOT NULL ORDER BY p.permission_id ) a </select> <!-- 查询系统所有有效权限--> <select id="getAllPermissions" resultMap="BaseResultMap" > select permission_id, `name`, sn, resources, parent_id, menu_id, `status` from sys_permission WHERE `status` = 0 AND sn IS NOT NULL AND resources IS NOT NULL </select> <!-- 根据主键Id查询权限 --> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > select permission_id, `name`, sn, resources, parent_id, menu_id, `status` from sys_permission where permission_id = #{permissionId,jdbcType=BIGINT} </select> <!-- 查询用户的角色id--> <select id="getUserRoleId" resultType="java.lang.Long" parameterType="java.lang.Long"> select role_id from sys_user_role WHERE user_id = #{userId} </select> <!-- 查询用户对应角色拥有的权限id--> <select id="getUserPermIds" resultType="java.lang.Long" parameterType="java.lang.Long"> select permission_id from sys_role_permission WHERE role_id = #{roleId} </select> <!-- 根据权限id查询一条权限数据(二级菜单权限)--> <select id="getTwoMenuPermById" resultMap="BaseResultMap" parameterType="java.lang.Long" > select permission_id, `name`, sn, resources, parent_id, menu_id, `status` from sys_permission where permission_id = #{permId} and parent_id is not null and menu_id is not null </select> <!-- 查询一条权限的所有子权限数据--> <select id="getChildrenPermission" resultMap="BaseResultMap" parameterType="com.sf.detectcore.controller.role.model.RolePermissionParam" > select permission_id, `name`, sn, resources, parent_id, menu_id, `status` from sys_permission where parent_id = #{parentPermId} and permission_id in <foreach collection="permIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysRoleMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysRole" > <id column="role_id" property="roleId" jdbcType="BIGINT" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="remarks" property="remarks" jdbcType="VARCHAR" /> <result column="status" property="status" jdbcType="TINYINT" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="create_id" property="createId" jdbcType="BIGINT" /> <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <result column="update_id" property="updateId" jdbcType="BIGINT" /> </resultMap> <!-- 插入一条数据 --> <insert id="insert" parameterType="com.sf.detectcore.entity.SysRole" > <selectKey resultType="java.lang.Long" keyProperty="roleId" order="AFTER" > SELECT LAST_INSERT_ID() </selectKey> insert into sys_role (`name`, remarks, `status`, create_time, create_id, update_time, update_id) values (#{name,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{createId,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, #{updateId,jdbcType=BIGINT}) </insert> <!-- 根据用户自增id查询他拥有的角色--> <select id="getRolesByUserId" resultMap="BaseResultMap" parameterType="java.lang.Long"> SELECT r.* FROM sys_role r LEFT JOIN sys_user_role ur ON r.role_id = ur.role_id WHERE ur.user_id = #{id} AND r.`status` = 0 </select> <!-- 根据主键修改角色信息 --> <update id="updateByPrimaryKey" parameterType="com.sf.detectcore.entity.SysRole" > update sys_role set `name` = #{name,jdbcType=VARCHAR}, remarks = #{remarks,jdbcType=VARCHAR}, `status` = #{status,jdbcType=TINYINT}, create_time = #{createTime,jdbcType=TIMESTAMP}, create_id = #{createId,jdbcType=BIGINT}, update_time = #{updateTime,jdbcType=TIMESTAMP}, update_id = #{updateId,jdbcType=BIGINT} where role_id = #{roleId,jdbcType=BIGINT} </update> <!-- 根据主键Id查询角色信息 --> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > select role_id, `name`, remarks, `status`, create_time, create_id, update_time, update_id from sys_role where role_id = #{roleId,jdbcType=BIGINT} </select> <!-- 根据主键删除角色 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" > delete from sys_role where role_id = #{roleId,jdbcType=BIGINT} </delete> <!-- 获取所有系统角色--> <select id="getAllSystemRole" resultMap="BaseResultMap"> select role_id, `name`, remarks, `status`, create_time, create_id, update_time, update_id from sys_role where role_id > 1 </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysRolePermissionMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysRolePermission" > <id column="id" property="id" jdbcType="BIGINT" /> <result column="role_id" property="roleId" jdbcType="BIGINT" /> <result column="permission_id" property="permissionId" jdbcType="BIGINT" /> </resultMap> <!-- 根据主键Id查询角色权限关系 --> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > select id, role_id, permission_id from sys_role_permission where id = #{id,jdbcType=BIGINT} </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysUserMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysUser" > <id column="user_id" property="userId" jdbcType="BIGINT" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="account" property="account" jdbcType="VARCHAR" /> <result column="password" property="password" jdbcType="VARCHAR" /> <result column="status" property="status" jdbcType="TINYINT" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="create_id" property="createId" jdbcType="BIGINT" /> <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <result column="update_id" property="updateId" jdbcType="BIGINT" /> <result column="lab_id" property="labId" jdbcType="BIGINT" /> </resultMap> <select id="selectAll" resultMap="BaseResultMap" > select user_id, `name`, account, `password`, `status`, create_time, create_id, update_time, update_id from sys_user </select> <!-- 根据账号查询用户--> <select id="getUserByAccount" resultMap="BaseResultMap" parameterType="java.lang.String"> select user_id, `name`, account, `password`, `status`, create_time, create_id, update_time, update_id,lab_id from sys_user where binary account = #{account} </select> <!-- 根据主键修改用户信息 --> <update id="updateByPrimaryKey" parameterType="com.sf.detectcore.entity.SysUser" > update sys_user set `name` = #{name,jdbcType=VARCHAR}, account = #{account,jdbcType=VARCHAR}, `password` = #{password,jdbcType=VARCHAR}, `status` = #{status,jdbcType=TINYINT}, create_time = #{createTime,jdbcType=TIMESTAMP}, create_id = #{createId,jdbcType=BIGINT}, update_time = #{updateTime,jdbcType=TIMESTAMP}, update_id = #{updateId,jdbcType=BIGINT}, lab_id = #{labId,jdbcType=BIGINT} where user_id = #{userId,jdbcType=BIGINT} </update> <!-- 根据主键删除用户 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" > delete from sys_user where user_id = #{userId,jdbcType=BIGINT} </delete> <!-- 根据主键查询用户信息 --> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > select user_id, `name`, account, `password`, `status`, create_time, create_id, update_time, update_id from sys_user where user_id = #{userId,jdbcType=BIGINT} </select> <!-- 查询指定用户的角色id--> <select id="getRoleId" resultType="java.lang.Long" parameterType="java.lang.Long"> SELECT role_id FROM sys_user_role WHERE user_id = #{userId} </select> <!-- 获取当前用户在指定页面的权限--> <select id="findUserPagePermission" resultType="java.lang.String" parameterType="java.util.Map"> SELECT p.resources from sys_permission p LEFT JOIN sys_role_permission rp on p.permission_id = rp.permission_id WHERE rp.role_id = #{roleId} AND p.parent_id = #{menuId} AND p.resources IS NOT NULL </select> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sf.detectcore.mapper.SysUserRoleMapper" > <resultMap id="BaseResultMap" type="com.sf.detectcore.entity.SysUserRole" > <id column="id" property="id" jdbcType="BIGINT" /> <result column="user_id" property="userId" jdbcType="BIGINT" /> <result column="role_id" property="roleId" jdbcType="BIGINT" /> </resultMap> </mapper>
3.mapper层
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sf.detectcore.controller.user.model.MenuResponse; import com.sf.detectcore.entity.SysMenu; import java.util.List; /** * @ClassName SysMenuMapper * @Description SysMenuMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysMenuMapper extends BaseMapper<SysMenu> { /** * 插入一条数据 * @param record * @return */ @Override int insert(SysMenu record); /** * 根据用户id查询他拥有所有菜单 * @param userId * @return List */ List<MenuResponse> getMenusByUserId(Long userId); /** * 根据父Id(parentId) 查询二级菜单 * @param parentId * @return */ List<MenuResponse> getByParentId(Long parentId); }
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.sf.detectcore.controller.query.SysPermissionQuery; import com.sf.detectcore.controller.role.model.RolePermissionParam; import com.sf.detectcore.entity.SysPermission; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * @ClassName SysPermissionMapper * @Description SysPermissionMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysPermissionMapper extends BaseMapper<SysPermission> { /** * 根据用多个角色id查询拥有的权限 * @param roleIds * @return List */ List<SysPermission> getPermissionsByRoles(@Param("roleIds")List<Long> roleIds); /** * 查询系统所有有效权限 * @return List */ List<SysPermission> getAllPermissions(); /** * 根据主键Id查询权限 * @param permissionId * @return */ SysPermission selectByPrimaryKey(Long permissionId); /** * 查询用户的角色id * @param userId * @return Long */ Long getUserRoleId(Long userId); /** * 查询用户对应角色拥有的权限id * @param roleId * @return List */ List<Long> getUserPermIds(Long roleId); /** * 根据权限id查询一条权限数据(二级菜单权限) * @param permId * @return SysPermission */ SysPermission getTwoMenuPermById(Long permId); /** * 查询一条权限的所有子权限数据 * @param param * @return List */ List<SysPermission> getChildrenPermission(RolePermissionParam param); }
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sf.detectcore.entity.SysRole; import java.util.List; /** * @ClassName SysRoleMapper * @Description SysRoleMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysRoleMapper extends BaseMapper<SysRole> { /** * 插入一条数据 * @param record * @return */ @Override int insert(SysRole record); /** * 根据用户自增id查询他拥有的角色 * @param id * @return List */ List<SysRole> getRolesByUserId(Long id); /** * 根据主键修改角色信息 * @param record * @return */ int updateByPrimaryKey(SysRole record); /** * 根据主键Id查询角色信息 * @param roleId * @return */ SysRole selectByPrimaryKey(Long roleId); /** * 根据主键删除角色 * @param roleId * @return */ int deleteByPrimaryKey(Long roleId); /** * 获取所有系统角色 * @return ResultData */ List<SysRole> getAllSystemRole(); }
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sf.detectcore.entity.SysRolePermission; import java.util.List; /** * @ClassName SysRolePermissionMapper * @Description SysRolePermissionMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysRolePermissionMapper extends BaseMapper<SysRolePermission> { /** * 根据主键Id查询角色权限关系 * @param id * @return */ SysRolePermission selectByPrimaryKey(Long id); }
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.sf.detectcore.entity.SysUser; import java.util.List; import java.util.Map; /** * @ClassName SysUserMapper * @Description UserMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysUserMapper extends BaseMapper<SysUser> { List<SysUser> selectAll(); /** * 根据账号查询用户 * @param account * @return User */ SysUser getUserByAccount(String account); /** * 根据主键修改用户信息 * @param record * @return */ int updateByPrimaryKey(SysUser record); /** * 根据主键删除用户 * @param userId * @return */ int deleteByPrimaryKey(Long userId); /** * 根据主键查询用户信息 * @param userId * @return */ SysUser selectByPrimaryKey(Long userId); /** * 查询指定用户的角色id * @param userId * @return Long */ Long getRoleId(Long userId); /** * 获取当前用户在指定页面的权限 * @param map * @return List */ List<String> findUserPagePermission(Map<String,Object> map); }
package com.sf.detectcore.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sf.detectcore.entity.SysUserRole; import java.util.List; /** * @ClassName SysUserRoleMapper * @Description SysUserRoleMapper * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysUserRoleMapper extends BaseMapper<SysUserRole> { }
4.service层
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.controller.user.model.MenuResponse; import com.sf.detectcore.entity.SysMenu; import java.util.List; /** * @ClassName SysMenuService * @Description 菜单相关服务 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysMenuService extends IService<SysMenu> { /** * 根据用户id查询他拥有的菜单 * @param userId * @returist */ List<MenuResponse> findUserMenus(Long userId); }
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.entity.SysPermission; import com.sf.detectcore.entity.SysRole; import java.util.List; /** * @ClassName SysPermissionService * @Description 权限相关服务 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysPermissionService extends IService<SysPermission> { /** * 根据用户的多个角色查询拥有的权限 * @param roles * @return */ List<SysPermission> findPermissionsByRoles(List<SysRole> roles); /** * 查询系统所有有效权限 * @return List */ List<SysPermission> loadAllPermissions(); }
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.entity.SysRolePermission; /** * @ClassName SysRolePermissionService * @Description SysRolePermissionService * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysRolePermissionService extends IService<SysRolePermission> { }
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.controller.query.RoleQuery; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.util.R; import java.util.List; /** * @ClassName SysRoleService * @Description 角色相关服务 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysRoleService extends IService<SysRole> { /** * 根据roleId查询角色 * @param roleId * @return */ SysRole getByRoleId(Long roleId); /** * 添加系统角色数据 * @param sysRole * @return R */ R addRole(SysRole sysRole); /** * 编辑系统角色数据 * @param sysRole * @return R */ R editRole(SysRole sysRole); /** * 查询一个角色的详情 * @param id * @return R */ R getRoleById(Long id); /** * 删除角色 * @param ids * @return R */ R deleteRole(String ids); /** * 查询角色列表数据 * @param roleQuery * @param user * @return R */ R getRolePagingData(RoleQuery roleQuery , SysUser user); /** * 查询系统所有权限 * @return R */ R getSystemPermission(); /** * 获取所有系统角色,添加用户时使用,排除超级管理员 * @param user * @return R */ R getSystemRole(SysUser user); }
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.entity.SysUserRole; /** * @ClassName SysUserRoleService * @Description SysUserRoleService * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysUserRoleService extends IService<SysUserRole> { }
package com.sf.detectcore.service; import com.baomidou.mybatisplus.extension.service.IService; import com.sf.detectcore.controller.query.UserQuery; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.util.R; import java.util.List; /** * @ClassName SysUserService * @Description 管理员相关服务 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public interface SysUserService extends IService<SysUser> { /** * 根据账号查询用户 * @param account * @return SysUser */ SysUser findUserByAccount(String account); /** * 根据用户自增id查询他拥有的角色 * @param * @return List */ List<SysRole> findRolesByUserId(Long id); /** * 新增系统用户 * @param user */ void addUser(SysUser user); /** * 编辑系统用户 * @param user */ void editUser(SysUser user); /** * 删除系统用户 * @param userIds */ void deleteUser(String userIds); /** * 查询系统用户数据 * @param userQuery * @param user * @return R */ R getUserPagingData(UserQuery userQuery , SysUser user); /** * 查询系统用户数据 * @param id * @return R */ R getUserById(Long id); /** * 获取当前用户在指定页面的权限 * @param userId * @param menuId * @return R */ R findUserPagePermission(Long userId, Long menuId); /** * 通过实验室Id查询用户信息 * @param id * @return */ List<SysUser> listQueryByLabId(Long id); }
5.serviceImpl
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.controller.user.model.MenuResponse; import com.sf.detectcore.entity.SysMenu; import com.sf.detectcore.mapper.SysMenuMapper; import com.sf.detectcore.service.SysMenuService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService { private final Logger logger = LoggerFactory.getLogger(SysMenuServiceImpl.class); @Autowired private SysMenuMapper sysMenuMapper; @Override public List<MenuResponse> findUserMenus(Long userId) { List<MenuResponse> list = new ArrayList<>(); //所有菜单 List<MenuResponse> sysMenus = sysMenuMapper.getMenusByUserId(userId); if(sysMenus != null && sysMenus.size() != 0) { for(MenuResponse menuResponse: sysMenus) { List<MenuResponse> list1 = new ArrayList<>(); if (Objects.equals(0L,menuResponse.getParentId())){ list.add(menuResponse); //添加二级菜单 for (MenuResponse menuResponse1: sysMenus){ if (Objects.equals(menuResponse.getMenuId(),menuResponse1.getParentId())){ list1.add(menuResponse1); } } menuResponse.setChildren(list1); } } } return list; } }
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.entity.SysPermission; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.mapper.SysPermissionMapper; import com.sf.detectcore.service.SysPermissionService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper,SysPermission> implements SysPermissionService { private final Logger logger = LoggerFactory.getLogger(SysPermissionServiceImpl.class); @Autowired SysPermissionMapper sysPermissionMapper; @Override public List<SysPermission> findPermissionsByRoles(List<SysRole> roles) { List<Long> roleIds = new ArrayList<>(); for (SysRole role : roles) { if(role != null){ roleIds.add(role.getRoleId()); } } if(roleIds.size() <= 0){ return null; } try{ return sysPermissionMapper.getPermissionsByRoles(roleIds); }catch (Exception e){ logger.error("根据用户角色查询拥有权限时异常:{}" , e); return null; } } @Override public List<SysPermission> loadAllPermissions() { return sysPermissionMapper.getAllPermissions(); } }
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.entity.SysRolePermission; import com.sf.detectcore.mapper.SysRolePermissionMapper; import com.sf.detectcore.service.SysRolePermissionService; import org.springframework.stereotype.Service; @Service public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionMapper,SysRolePermission> implements SysRolePermissionService { }
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.config.constant.SystemConstants; import com.sf.detectcore.controller.query.RoleQuery; import com.sf.detectcore.controller.role.model.RolePermissionParam; import com.sf.detectcore.entity.*; import com.sf.detectcore.mapper.SysPermissionMapper; import com.sf.detectcore.mapper.SysRoleMapper; import com.sf.detectcore.mapper.SysRolePermissionMapper; import com.sf.detectcore.mapper.SysUserRoleMapper; import com.sf.detectcore.service.SysRoleService; import com.sf.detectcore.util.R; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService { private final Logger logger = LoggerFactory.getLogger(SysRoleServiceImpl.class); @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysRolePermissionMapper sysRolePermissionMapper; @Autowired private SysPermissionMapper sysPermissionMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Override public SysRole getByRoleId(Long roleId) { return sysRoleMapper.selectByPrimaryKey(roleId); } @Transactional(propagation = Propagation.REQUIRED , rollbackFor = Exception.class) @Override public R addRole(SysRole sysRole) { QueryWrapper<SysRole> wrapper = new QueryWrapper<>(); wrapper.eq("name" , sysRole.getName()); SysRole existRole = sysRoleMapper.selectOne(wrapper); if(existRole != null){ return new R(SystemConstants.PARAM_INCORRECT_CODE , Boolean.FALSE,"当前角色名称已经存在,添加失败!"); } // 1添加基本信息 sysRoleMapper.insert(sysRole); return R.ok(); } @Transactional(propagation = Propagation.REQUIRED , rollbackFor = Exception.class) @Override public R editRole(SysRole sysRole) { // 1修改角色基本信息 sysRoleMapper.updateByPrimaryKey(sysRole); if (Objects.nonNull(sysRole.getPermissionIds())){ // 2修改角色权限关系数据 删除角色之前的权限数据 QueryWrapper<SysRolePermission> wrapper = new QueryWrapper<>(); wrapper.eq("role_id" ,sysRole.getRoleId()); sysRolePermissionMapper.delete(wrapper); List<Long> permissionIds = sysRole.getPermissionIds(); for (Long id : permissionIds) { SysRolePermission relation = new SysRolePermission(); relation.setRoleId(sysRole.getRoleId()); relation.setPermissionId(id); sysRolePermissionMapper.insert(relation); } } return R.ok(); } @Override public R getRoleById(Long id) { SysRole role = sysRoleMapper.selectByPrimaryKey(id); QueryWrapper<SysRolePermission> wrapper = new QueryWrapper<>(); wrapper.eq("role_id" , id); List<SysRolePermission> relations = sysRolePermissionMapper.selectList(wrapper); logger.info("relations:{}",relations); List<Long> result = new ArrayList<>(); int i=0; for (SysRolePermission relation : relations) { Long permissionId = relation.getPermissionId(); SysPermission permission = sysPermissionMapper.selectByPrimaryKey(permissionId); if(!StringUtils.isEmpty(permission.getResources())){ result.add(relation.getPermissionId()); } } role.setPermissionIds(result); return R.ok(result); } @Override public R deleteRole(String ids) { try{ QueryWrapper<SysUserRole> urWrapper = new QueryWrapper<>(); urWrapper.in("role_id" , ids.split(",")); List<SysUserRole> relations = sysUserRoleMapper.selectList(urWrapper); if(relations != null && relations.size() >= 1){ return R.error(SystemConstants.PARAM_INCORRECT_CODE,"所选角色有系统用户使用,不能删除!"); } for (String id : ids.split(",")) { //删除角色-权限数据 QueryWrapper<SysRolePermission> wrapper = new QueryWrapper<>(); wrapper.eq("role_id",Long.valueOf(id)); sysRolePermissionMapper.delete(wrapper); // 删除基本数据 sysRoleMapper.deleteByPrimaryKey(Long.valueOf(id)); } return R.ok(); }catch (Exception e){ log.error("删除角色异常,异常信息:{}" , e); return R.error(SystemConstants.SERVER_ERROR_CODE,"失败"); } } @Override public R getRolePagingData(RoleQuery roleQuery, SysUser user) { try{ QueryWrapper<SysRole> wrapper = new QueryWrapper<>(); if(roleQuery.getName() != null && !roleQuery.getName().isEmpty()){ wrapper.like("name" , roleQuery.getName()); } //角色列表,不展示超级管理员,数据库表统一配置为自增id为1 wrapper.notIn("role_id",1); IPage<SysRole> pageData = sysRoleMapper.selectPage(new Page<>(roleQuery.getPageNum(), roleQuery.getPageSize()), wrapper); return R.ok(pageData); }catch (Exception e){ log.error("查询角色列表数据异常,异常信息:{}" , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "查询失败"); } } @Override public R getSystemPermission() { List<SysPermission> permission = new ArrayList<>(); try{ //查询出所有父权限Id QueryWrapper<SysPermission> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("parent_id",0); List<SysPermission> sysPermissions1 = sysPermissionMapper.selectList(queryWrapper); permission.addAll(sysPermissions1); for (SysPermission sysPermission1:sysPermissions1){ QueryWrapper<SysPermission> queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("parent_id",sysPermission1.getPermissionId()); List<SysPermission> sysPermissions2 = sysPermissionMapper.selectList(queryWrapper1); sysPermission1.setChildren(sysPermissions2); for (SysPermission sysPermission2:sysPermissions2){ QueryWrapper<SysPermission> queryWrapper2 = new QueryWrapper<>(); queryWrapper2.eq("parent_id",sysPermission2.getPermissionId()); List<SysPermission> sysPermissions3 = sysPermissionMapper.selectList(queryWrapper2); sysPermission2.setChildren(sysPermissions3); } } return R.ok(permission); }catch (Exception e){ log.error("getSystemPermission查询系统权限异常,异常信息:{}" , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "查询失败"); } } @Override public R getSystemRole(SysUser user) { List<SysRole> systemRole; // if(user.getStationId() != null){ // Long userId = user.getUserId(); // systemRole = sysRoleMapper.getSystemRole(userId); // }else{ systemRole = sysRoleMapper.getAllSystemRole(); // } return R.ok(systemRole); } }
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.entity.SysUserRole; import com.sf.detectcore.mapper.SysUserRoleMapper; import com.sf.detectcore.service.SysUserRoleService; import org.springframework.stereotype.Service; @Service public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService { }
package com.sf.detectcore.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.sf.detectcore.config.constant.SystemConstants; import com.sf.detectcore.controller.query.UserQuery; import com.sf.detectcore.entity.Lab; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.entity.SysUserRole; import com.sf.detectcore.mapper.LabMapper; import com.sf.detectcore.mapper.SysRoleMapper; import com.sf.detectcore.mapper.SysUserMapper; import com.sf.detectcore.mapper.SysUserRoleMapper; import com.sf.detectcore.service.SysUserService; import com.sf.detectcore.util.R; import org.apache.http.impl.client.CloseableHttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class SysUserServiceImpl extends ServiceImpl<SysUserMapper,SysUser> implements SysUserService { @Autowired SysUserMapper sysUserMapper; @Autowired SysRoleMapper sysRoleMapper; @Autowired SysUserRoleMapper sysUserRoleMapper; @Autowired private LabMapper labMapper; @Override public SysUser findUserByAccount(String account){ return sysUserMapper.getUserByAccount(account); } @Override public List<SysRole> findRolesByUserId(Long id) { return sysRoleMapper.getRolesByUserId(id); } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @Override public void addUser(SysUser user) { // 1添加用户信息 sysUserMapper.insert(user); // 2添加用户角色信息 List<Long> roleIds = user.getRoleIds(); for (Long roleId : roleIds) { SysUserRole relation = new SysUserRole(); relation.setUserId(user.getUserId()); relation.setRoleId(roleId); sysUserRoleMapper.insert(relation); } } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @Override public void editUser(SysUser user) { // 1编辑用户基本信息 sysUserMapper.updateByPrimaryKey(user); // 2编辑用户角色信息(先删除以往的角色,再添加角色) QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>(); wrapper.eq("user_id" , user.getUserId()); sysUserRoleMapper.delete(wrapper); List<Long> roleIds = user.getRoleIds(); for (Long roleId : roleIds) { SysUserRole relation = new SysUserRole(); relation.setUserId(user.getUserId()); relation.setRoleId(roleId); sysUserRoleMapper.insert(relation); } } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @Override public void deleteUser(String userIds) { for (String userId : userIds.split(",")) { // 1删除用户基本信息 sysUserMapper.deleteByPrimaryKey(Long.valueOf(userId)); // 2删除用户角色信息 QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>(); wrapper.eq("user_id" , userId); sysUserRoleMapper.delete(wrapper); } } @Override public R getUserPagingData(UserQuery userQuery, SysUser user) { QueryWrapper<SysUser> wrapper = new QueryWrapper<>(); if(userQuery.getName() != null && !userQuery.getName().isEmpty()){ wrapper.like("name" , userQuery.getName()); } if(userQuery.getAccount() != null && !userQuery.getAccount().isEmpty()){ wrapper.eq("account" , userQuery.getAccount()); } //用户列表,不展示超级管理员,数据库表统一配置为自增id为1 wrapper.notIn("user_id",1); IPage<SysUser> pageData = sysUserMapper.selectPage(new Page<>(userQuery.getPageNum(), userQuery.getPageSize()), wrapper); List<SysUser> users = pageData.getRecords(); for (SysUser userd : users) { if(userd.getLabId() != null){ Lab lab = labMapper.selectById(userd.getLabId()); userd.setLabName(lab.getName()); } //默认一个 用户仅存在一个角色 List<SysRole> rolesByUserId = sysRoleMapper.getRolesByUserId(userd.getUserId()); userd.setRoleId(rolesByUserId.get(0).getRoleId()); userd.setRoleName(rolesByUserId.get(0).getName()); } return R.ok(pageData); } @Override public R getUserById(Long id) { // 基本信息 SysUser user = sysUserMapper.selectByPrimaryKey(id); // 角色自增ID QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>(); wrapper.eq("user_id" , id); List<SysUserRole> relationList = sysUserRoleMapper.selectList(wrapper); List<Long> roleIds = new ArrayList<>(); for (SysUserRole relation : relationList) { if(relation != null){ roleIds.add(relation.getRoleId()); } } user.setRoleIds(roleIds); user.setRoleId(roleIds.get(0)); return R.ok(user); } // @Override // public List<SysUser> getUsersByStationId(Long stationId) { // QueryWrapper<Station> wrapper = new QueryWrapper<>(); // if(user.getStationId() != null && user.getStationId() > 0){ // wrapper.eq("station_id" , user.getStationId()); // } // wrapper.eq("s_df" , 0); // return stationMapper.selectList(wrapper); // } @Override public R findUserPagePermission(Long userId, Long menuId) { try { Long roleId = sysUserMapper.getRoleId(userId); Map<String, Object> map = new HashMap<>(); map.put("roleId" , roleId); map.put("menuId" , menuId); List<String> datas = sysUserMapper.findUserPagePermission(map); return R.ok(datas); }catch (Exception e){ log.error("findUserPagePermission查询用户拥有的权限异常:{}" , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "查询失败"); } } @Override public List<SysUser> listQueryByLabId(Long id) { QueryWrapper<SysUser> q1 = new QueryWrapper<>(); q1.eq("lab_id",id); return sysUserMapper.selectList(q1); } }
6.登录控制器
package com.sf.detectcore.controller.login; import com.alibaba.fastjson.JSON; import com.sf.detectcore.config.constant.Constant; import com.sf.detectcore.config.constant.SystemConstants; import com.sf.detectcore.controller.login.model.LoginModel; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.service.SysUserService; import com.sf.detectcore.util.R; import com.sf.detectcore.util.VerifyCodeUtil; import com.sf.detectcore.util.redis.RedisUtil; import com.sf.detectcore.util.rsa.RSAUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.validation.Valid; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.*; import java.util.List; import java.util.concurrent.TimeUnit; /** * @Description 登录相关接口 * @Author huyong * @Date 2019/10/14 14:52 * @Version 1.0 */ @Api(value="LoginController", description = "登录相关接口") @RestController @RequestMapping(value="login") public class LoginController { private final Logger logger = LoggerFactory.getLogger(LoginController.class); /** 登录有效时间 */ @Value("${shiro.timeout}") private int timeOut; /** RSA私钥 */ @Value("${RSA.privateKey}") private String privateKey; /** RSA公钥 */ @Value("${RSA.publicKey}") private String publicKey; @Autowired SysUserService sysUserService; @Autowired StringRedisTemplate redis; @Autowired RedisUtil redisUtil; @ApiOperation(value = "用户登录", notes = "用户登录" , httpMethod = "POST") @PostMapping(value = "login") @ResponseBody public R login(@Valid @RequestBody LoginModel loginModel, HttpServletRequest request){ String sessionVerifyCode = (String)request.getSession().getAttribute(SystemConstants.VERIFYCODE); System.out.println(sessionVerifyCode+": "+loginModel.getVerifyCode()); if(sessionVerifyCode == null || !sessionVerifyCode.equals(loginModel.getVerifyCode())){ return new R(SystemConstants.PARAM_INCORRECT_CODE,false , "验证码错误或已过期,请刷新页面重试"); } request.getSession().removeAttribute(SystemConstants.VERIFYCODE); SysUser user = sysUserService.findUserByAccount(loginModel.getAccount()); if(user == null){ return new R(SystemConstants.PARAM_INCORRECT_CODE,false , "系统无此用户!"); } String userPwd = getRsaDecryStr(user.getPassword()); String loginPwd = getRsaDecryStr(loginModel.getPassword()); if(!userPwd.equals(loginPwd)){ return new R(SystemConstants.AUTH_FAIL_CODE,false , "密码错误!"); } List<SysRole> roles = sysUserService.findRolesByUserId(user.getUserId()); if (Objects.equals(Constant.INT_1,user.getStatus())){ return R.error(SystemConstants.PARAM_INCORRECT_CODE,"账号不可用,请联系管理员"); } try{ Subject subject = SecurityUtils.getSubject(); subject.logout(); Session oldSession = subject.getSession(); // 重置session final LinkedHashMap<Object, Object> attributes = new LinkedHashMap<>(); Collection<Object> keys = oldSession.getAttributeKeys(); for (Object key : keys) { final Object value = oldSession.getAttribute(key); if(value != null){ attributes.put(key , value); } } oldSession.stop(); Session session = subject.getSession(); for (final Object key : attributes.keySet()) { session.setAttribute(key , attributes.get(key)); } if(!subject.isAuthenticated()){ UsernamePasswordToken token = new UsernamePasswordToken(loginModel.getAccount(), userPwd); subject.login(token); // shiro设置一次登录session的有效时间 session.setTimeout(timeOut); session.setAttribute(SystemConstants.SESSION_USER , user); session.setAttribute(SystemConstants.SESSION_USER_ROLES , roles); session.setAttribute(SystemConstants.SESSION_ID, session.getId()); //设置Key过期时间,将用户信息Json字符串存redis user.setRoleName(roles.get(0).getName()); redis.opsForValue().set(SystemConstants.REDIS_KEY_PREFIX+session.getId() ,JSON.toJSONString(user),timeOut, TimeUnit.MILLISECONDS); // 必要值返回给前端 Map<String, Object> map = new HashMap<>(); map.put(SystemConstants.SESSION_USER, user); map.put(SystemConstants.SESSION_USER_ROLES , roles); map.put(SystemConstants.SESSION_ID , session.getId()); logger.info("登录成功:{}",user); return R.ok(map); } }catch (AuthenticationException e){ logger.error("用户_{}登录shiro认证异常,异常信息:{}" , loginModel.getAccount() , e); return new R(SystemConstants.AUTH_FAIL_CODE,false , null); }catch (Exception e){ logger.error("用户_{}登录异常,异常信息:{}" , loginModel.getAccount() , e); return new R(SystemConstants.SERVER_ERROR_CODE,false , "登录异常"); } return new R(SystemConstants.SERVER_ERROR_CODE,false , "登录失败"); } @GetMapping(value = "/getVerifyCodeImage") @ResponseBody public void getVerifyCodeImage(HttpServletRequest request, HttpServletResponse response) throws IOException { HttpSession session = request.getSession(); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); String verifyCode = VerifyCodeUtil.generateTextCode(VerifyCodeUtil.TYPE_NUM_LOWER, 4, null); session.removeAttribute(SystemConstants.VERIFYCODE); session.setAttribute(SystemConstants.VERIFYCODE , verifyCode); response.setContentType("image/jpeg"); BufferedImage bufferedImage = VerifyCodeUtil.generateImageCode(verifyCode, 90, 30, 3, true, Color.WHITE, Color.BLACK, null); ImageIO.write(bufferedImage, "jpeg", response.getOutputStream()); } public String getRsaDecryStr(String str){ //将加密字符串解密并返回 String replaceStr = str.replace(" ", "+"); return RSAUtils.decryptDataOnJava(replaceStr , privateKey); } @ApiOperation(value = "拦截登录接口", notes = "返回json,由前端判断,跳转登录页面" , httpMethod = "GET") @GetMapping(value = "goLogin") @ResponseBody public R goLogin(HttpServletRequest request){ //清除redis中的登录信息 if(redisUtil.hasKey(request.getSession().getId())) { redisUtil.del(request.getSession().getId()); } //清除session SecurityUtils.getSubject().logout(); return R.error(SystemConstants.AUTH_FAIL_CODE,"用户信息过期,请重新登录"); } @ApiOperation(value = "没有权限时拦截到的接口", notes = "没有权限时拦截到的接口" , httpMethod = "GET") @GetMapping(value = "unauthorized") @ResponseBody public R unauthorized(){ return R.error(SystemConstants.PARAM_INCORRECT_CODE,"抱歉,您当前没有权限访问!"); } @ApiOperation(value = "退出登录", notes = "退出登录" , httpMethod = "GET") @GetMapping(value = "logout") @ResponseBody public R logout(HttpServletRequest request){ //清除redis中的登录信息 if(redisUtil.hasKey(request.getSession().getId())) { redisUtil.del(request.getSession().getId()); } //清除session SecurityUtils.getSubject().logout(); return R.ok(); } }
登录参数模块
package com.sf.detectcore.controller.login.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; /** * @ClassName LoginModel * @Description 登录参数 * @Author huyong * @Date 2019/10/16 17:34 * @Version 1.0 */ @ApiModel("登录参数模型") @Data public class LoginModel { @ApiModelProperty(value="账号",required = true,example = "admin") @NotBlank(message = "请输入用户名") private String account; @ApiModelProperty(value="密码",required = true,example = "Md0SXbpC9zjYN+qkoSgv2+5DI4JbH6HEuSRGQ/nh3SzxkUXWkx2iNquaYLcvxQGCU28vvVDrlXu7zKxE+NM+jxZDVZ9maZQ5eIlWYPHhFxEWeGnXKL+4amGWOZvoxyAVJ34+VAItzUQEGhSUZStz8rNKl38lQvFtlNJQXsGEb3o=") @NotBlank(message = "请输入密码") private String password; @ApiModelProperty(value="验证码",required = true) @NotBlank(message = "验证码不能为空") private String verifyCode; }
用户模块控制器
package com.sf.detectcore.controller.user; import com.sf.detectcore.config.constant.Constant; import com.sf.detectcore.config.constant.SystemConstants; import com.sf.detectcore.controller.query.UserQuery; import com.sf.detectcore.controller.user.model.AddUserModel; import com.sf.detectcore.controller.user.model.EditUserModel; import com.sf.detectcore.controller.user.model.MenuResponse; import com.sf.detectcore.entity.SysMenu; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.service.SysMenuService; import com.sf.detectcore.service.SysUserService; import com.sf.detectcore.util.R; import com.sf.detectcore.util.rsa.RSAUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @ClassName SysUserController * @Description 管理员相关接口 * @Author huyong * @Date 2019/10/8 18:23 * @Version 1.0 */ @Api(value = "系统用户相关接口" , description = "系统用户相关接口") @RestController @RequestMapping(value = "user") public class SysUserController { private final Logger logger = LoggerFactory.getLogger(SysUserController.class); /** RSA私钥 */ @Value("${RSA.privateKey}") private String privateKey; /** RSA公钥 */ @Value("${RSA.publicKey}") private String publicKey; @Autowired private SysUserService sysUserService; @Autowired private SysMenuService sysMenuService; @ApiOperation(value = "新增-系统用户") @ApiImplicitParams({ @ApiImplicitParam(name = "name",value = "姓名",required = true,dataType = "String"), @ApiImplicitParam(name = "account",value = "登录账户(8位字母)",required = true,dataType = "String"), @ApiImplicitParam(name = "roleIds",value = "角色Id",required = true,dataType ="List"), @ApiImplicitParam(name = "labId",value = "实验室Id(实验室管理员必传)",dataType = "Long") }) @PostMapping(value = "addUser") public R addUser(@Valid @RequestBody AddUserModel userModel, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, bindingResult.getFieldError().getDefaultMessage()); } if(userModel.getRoleIds().isEmpty()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "请选择用户角色!"); } if(userModel.getRoleIds().size() != 1){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, "请选择一个角色!" ); } String account = userModel.getAccount(); SysUser checkUser = sysUserService.findUserByAccount(account); if(checkUser != null){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "当前用户名已存在,请重新设置!"); } SysUser sessionUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); SysUser user = new SysUser(); BeanUtils.copyProperties(userModel , user); user.setCreateId(sessionUser.getUserId()); user.setUpdateId(sessionUser.getUserId()); String encryptPwd = RSAUtils.encryptedDataOnJava(SystemConstants.DEFAULT_PASSWORD, publicKey); user.setPassword(encryptPwd); try{ sysUserService.addUser(user); return R.ok(null, Constant.OK_MESSAGE_ADD); }catch (Exception e){ logger.error("添加系统用户异常,操作人:{},异常信息:{}" , sessionUser.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "失败"); } } @ApiOperation(value = "编辑-系统用户") @ApiImplicitParams({ @ApiImplicitParam(name = "name",value = "姓名",required = true,dataType = "String"), @ApiImplicitParam(name = "account",value = "登录账户(8位字母)",required = true,dataType = "String"), @ApiImplicitParam(name = "roleIds",value = "角色Id",required = true,dataType ="List"), @ApiImplicitParam(name = "status",value = "状态(0:启用 1:禁用)",dataType = "Integer"), @ApiImplicitParam(name = "labId",value = "实验室Id(实验室管理员必传)",dataType = "Long") }) @PostMapping(value = "editUser") public R editUser(@Valid @RequestBody EditUserModel userModel, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, bindingResult.getFieldError().getDefaultMessage()); } Long userId = userModel.getUserId(); if(userId == null || userId <= 0){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "参数缺失:id"); } SysUser currentUser = sysUserService.getById(userId); if(currentUser == null){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "用户不存在,无法编辑!"); } if(userModel.getRoleIds().isEmpty()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "请选择用户角色!" ); } currentUser.setRoleIds(userModel.getRoleIds()); SysUser sessionUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); currentUser.setName(userModel.getName()); currentUser.setAccount(userModel.getAccount()); currentUser.setStatus(userModel.getStatus()); currentUser.setUpdateId(sessionUser.getUserId()); currentUser.setUpdateTime(new Date()); currentUser.setLabId(userModel.getLabId()); try { sysUserService.editUser(currentUser); return R.ok(Constant.OK_MESSAGE_UPDATE); }catch (Exception e){ logger.error("编辑用户异常,操作人:{},异常信息:{}" , sessionUser.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "失败"); } } @ApiOperation(value = "删除-系统用户") @ApiImplicitParam(name = "userIds",value = "用户主键Id集合",required = true,dataType = "List") @PostMapping(value = "deleteUser") public R deleteUser(@RequestParam(value = "userIds") String userIds , HttpServletRequest request){ SysUser sessionUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); try { sysUserService.deleteUser(userIds); return new R(SystemConstants.SUCCESS_CODE , null , null); }catch (Exception e){ logger.error("删除用户异常,操作人:{},异常信息:{}" , sessionUser.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "失败"); } } @ApiOperation(value = "查询-用户数据列表") @ApiImplicitParams({ @ApiImplicitParam(name = "name",value = "姓名",dataType = "String"), @ApiImplicitParam(name = "account",value = "登录账户(8位字母)",dataType = "String") }) @PostMapping(value = "getUserPagingData") public R getUserPagingData(@RequestBody UserQuery userQuery , HttpServletRequest request){ SysUser user = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); return sysUserService.getUserPagingData(userQuery , user); } @ApiOperation(value = "Id查询-用户详情信息") @ApiImplicitParam(name = "id",value = "用户主键ID",required = true,dataType = "Long") @GetMapping(value = "getUserById") public R getUserById(@RequestParam Long id){ return sysUserService.getUserById(id); } public String getRsaDecryStr(String str){ //将加密字符串解密并返回 String replaceStr = str.replace(" ", "+"); return RSAUtils.decryptDataOnJava(replaceStr , privateKey); } @ApiOperation(value = "修改-用户密码") @ApiImplicitParams({ @ApiImplicitParam(name = "currentPassword",value = "旧密码",required = true,dataType = "String"), @ApiImplicitParam(name = "newPassword",value = "新密码",required = true,dataType = "String") }) @PostMapping(value = "updatePassword") public R updatePassword(@RequestParam String currentPassword , @RequestParam String newPassword , HttpServletRequest request){ currentPassword = currentPassword.replace(" ", "+"); newPassword = newPassword.replace(" ", "+"); SysUser user = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); String userOldPwd = RSAUtils.decryptDataOnJava(user.getPassword(), privateKey); String pageUserPwd = RSAUtils.decryptDataOnJava(currentPassword, privateKey); if(!userOldPwd.equals(pageUserPwd)){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "旧密码错误!"); } String userNewPwd = RSAUtils.decryptDataOnJava(newPassword, privateKey); if(!matchPassword(userNewPwd)){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "密码必须为10-16位,数字及大小写字母组成!"); } try { user.setPassword(newPassword); user.setUpdateTime(new Date()); sysUserService.updateById(user); return R.ok(null,"修改成功"); }catch (Exception e){ logger.error("用户:{}修改自己密码异常,异常信息:{}" , user.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE ,"修改失败" ); } } static Boolean matchPassword(String pwd){ String regex = "^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$)^.{10,16}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(pwd); return matcher.matches(); } @ApiOperation(value = "重置-用户密码") @ApiImplicitParam(name = "id",value = "重置用户Id",required = true,dataType = "Long") @GetMapping(value = "resetPassword") public R resetPassword(@RequestParam Long id, HttpServletRequest request) { SysUser sessionUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); SysUser user = sysUserService.getById(id); if(user == null){ return R.error(SystemConstants.PARAM_INCORRECT_CODE , "用户不存在,无法修改!" ); } try{ String encryptPwd = RSAUtils.encryptedDataOnJava(SystemConstants.DEFAULT_PASSWORD, publicKey); user.setPassword(encryptPwd); sysUserService.updateById(user); return R.ok(); }catch (Exception e){ logger.error("管理员{}重置用户:{}密码时异常,异常信息:{}" , sessionUser.getAccount() , user.getAccount(), e); return R.error(SystemConstants.SERVER_ERROR_CODE , "修改失败" ); } } @ApiOperation(value = "查询-当前用户的菜单数据") @GetMapping(value = "getUserMenu") public R getUserMenu(HttpServletRequest request) { SysUser user = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); List<MenuResponse> userMenus = sysMenuService.findUserMenus(user.getUserId()); return R.ok(userMenus); } @ApiOperation(value = "查询-当前用户在指定页面的权限") @PostMapping(value = "getUserPagePermission") public R getUserPagePermission(@RequestParam Long menuId , HttpServletRequest request){ SysUser user = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); return sysUserService.findUserPagePermission(user.getUserId() , menuId); } }
用户模块实体类
package com.sf.detectcore.controller.user.model; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.util.List; /** * @ClassName AddUserModel * @Description 新增系统用户请求实体类 * @Author YangLei * @Date 2019/5/14 10:42 * @Version 1.0 **/ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class AddUserModel { @ApiModelProperty(value = "姓名") @NotNull(message = "用户姓名不得为空") private String name; @ApiModelProperty(value = "登录账户(8位字母)") @NotNull(message = "登录账户不得为空") private String account; @ApiModelProperty(value = "角色id集合") @NotNull(message = "角色信息不能为空") private List<Long> roleIds; @ApiModelProperty(value = "实验室Id") private Long labId; }
package com.sf.detectcore.controller.user.model; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.util.List; /** * @ClassName EditUserModel * @Description TODO * @Author YangLei * @Date 2019/5/14 10:44 * @Version 1.0 **/ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class EditUserModel { @ApiModelProperty(value = "自增id") private Long userId; @ApiModelProperty(value = "姓名") @NotNull(message = "用户姓名不得为空") private String name; @ApiModelProperty(value = "登录账户(8位字母)") @NotNull(message = "登录账户不得为空") private String account; @ApiModelProperty(value = "状态(0-正常;1-不可用)") private Integer status = 0; @ApiModelProperty(value = "角色id集合") @NotNull(message = "请选择角色!") private List<Long> roleIds; @ApiModelProperty(value = "实验室Id") private Long labId; }
package com.sf.detectcore.controller.user.model; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import java.util.List; /** * @ClassName MenuResponse * @Description 菜单响应数据模型 * @Author huyong * @Date 2019/10/14 14:52 * @Version 1.0 */ @Data @AllArgsConstructor @NoArgsConstructor @ToString public class MenuResponse { private Long menuId; private String name; private String icon; private Long parentId; private String identity; private List<MenuResponse> children; }
角色模块控制器
package com.sf.detectcore.controller.role; import com.sf.detectcore.config.constant.SystemConstants; import com.sf.detectcore.controller.query.RoleQuery; import com.sf.detectcore.controller.role.model.AddRoleModel; import com.sf.detectcore.controller.role.model.EditRoleModel; import com.sf.detectcore.controller.role.model.EditRoleVerifyModel; import com.sf.detectcore.entity.SysRole; import com.sf.detectcore.entity.SysUser; import com.sf.detectcore.service.SysRoleService; import com.sf.detectcore.util.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.Date; import java.util.List; /** * @ClassName SysRoleController * @Description 角色相关接口 * @Author huyong * @Date 2019/10/14 14:52 * @Version 1.0 */ @Api(value="系统角色相关接口",description = "系统角色相关接口") @RestController @RequestMapping(value= "role") public class SysRoleController { private final Logger logger = LoggerFactory.getLogger(SysRoleController.class); @Autowired private SysRoleService sysRoleService; @ApiOperation(value = "新增-角色信息") @ApiImplicitParams({ @ApiImplicitParam(name = "name",value = "角色名称",required = true,dataType = "String"), @ApiImplicitParam(name = "permissionIds",value = "权限Id集合",required = true,dataType = "String"), @ApiImplicitParam(name = "remarks",value = "备注",dataType = "String") }) @PostMapping(value = "addRole") public R addRole(@Valid @RequestBody AddRoleModel roleModel, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return new R(SystemConstants.PARAM_INCORRECT_CODE,Boolean.FALSE ,bindingResult.getFieldError().getDefaultMessage()); } SysRole role = new SysRole(); BeanUtils.copyProperties(roleModel , role); SysUser sessionSysUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); role.setCreateId(sessionSysUser.getUserId()); role.setUpdateId(sessionSysUser.getUserId()); role.setCreateTime(new Date()); //默认可用 role.setStatus(SystemConstants.ROLE_STATUS_AVAILABLE); try{ return sysRoleService.addRole(role); }catch (Exception e){ logger.error("添加角色异常,操作人:{},异常信息:{}" , sessionSysUser.getUserId() , e); return new R(SystemConstants.SERVER_ERROR_CODE,Boolean.FALSE , "失败"); } } @ApiOperation(value = "Id查询-角色的详情") @ApiImplicitParam(name = "id",value = "角色主键Id",required = true,dataType = "Long") @PostMapping(value = "getRoleById") public R getRoleById(@RequestParam Long id){ return sysRoleService.getRoleById(id); } @ApiOperation(value = "编辑-角色信息") @ApiImplicitParams({ @ApiImplicitParam(name = "roleId",value = "主键角色Id",required = true,dataType = "Long"), @ApiImplicitParam(name = "name",value = "角色名字",required = true,dataType = "String"), @ApiImplicitParam(name = "remarks",value = "备注",required = false,dataType = "String"), @ApiImplicitParam(name = "permissionIds",value = "权限Id集合",required = true,dataType = "String") }) @PostMapping(value = "editRole") public R editRole(@Valid @RequestBody EditRoleModel roleModel, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, bindingResult.getFieldError().getDefaultMessage()); } if(roleModel.getRoleId() == null){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, "请传入角色ID"); } SysUser sessionSysUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); SysRole currentRole = sysRoleService.getByRoleId(roleModel.getRoleId()); currentRole.setName(roleModel.getName()); currentRole.setRemarks(roleModel.getRemarks()); currentRole.setUpdateId(sessionSysUser.getUserId()); currentRole.setUpdateTime(new Date()); try{ return sysRoleService.editRole(currentRole); }catch (Exception e){ logger.error("编辑角色异常,操作人:{},异常信息:{}" , sessionSysUser.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "失败"); } } @ApiOperation(value = "编辑-角色权限") @ApiImplicitParams({ @ApiImplicitParam(name = "roleId",value = "主键角色Id",required = true,dataType = "Long"), @ApiImplicitParam(name = "name",value = "角色名字",required = true,dataType = "String"), @ApiImplicitParam(name = "remarks",value = "备注",required = false,dataType = "String"), @ApiImplicitParam(name = "permissionIds",value = "权限Id集合",required = true,dataType = "String") }) @PostMapping(value = "editRoleVerify") public R editRoleVerify(@Valid @RequestBody EditRoleVerifyModel roleModel, BindingResult bindingResult, HttpServletRequest request){ if(bindingResult.hasErrors()){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, bindingResult.getFieldError().getDefaultMessage()); } if(roleModel.getRoleId() == null){ return R.error(SystemConstants.PARAM_INCORRECT_CODE, "请传入角色ID"); } SysUser sessionSysUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); SysRole currentRole = sysRoleService.getByRoleId(roleModel.getRoleId()); currentRole.setUpdateId(sessionSysUser.getUserId()); currentRole.setUpdateTime(new Date()); currentRole.setPermissionIds(roleModel.getPermissionIds()); try{ return sysRoleService.editRole(currentRole); }catch (Exception e){ logger.error("编辑角色权限异常,操作人:{},异常信息:{}" , sessionSysUser.getUserId() , e); return R.error(SystemConstants.SERVER_ERROR_CODE , "失败"); } } @ApiOperation(value = "删除-角色信息") @ApiImplicitParam(name = "ids",value = "角色主键ID",required = true,dataType = "List") @PostMapping(value = "deleteRole") public R deleteRole(@RequestParam(value = "ids") String ids){ return sysRoleService.deleteRole(ids); } @ApiOperation(value = "分页查询-角色列表") @ApiImplicitParam(name = "name",value = "角色名称",dataType = "String") @PostMapping(value = "getRolePagingData") public R getRolePagingData(@RequestBody RoleQuery roleQuery , HttpServletRequest request){ SysUser SysUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); return sysRoleService.getRolePagingData(roleQuery , SysUser); } @ApiOperation(value = "查询-系统所有权限") @PostMapping(value = "getSystemPermission") public R getSystemPermission(){ return sysRoleService.getSystemPermission(); } @ApiOperation(value = "查询-获取所有系统角色") @PostMapping(value = "getSystemRole") public R getSystemRole(HttpServletRequest request){ SysUser SysUser = (SysUser)request.getSession().getAttribute(SystemConstants.SESSION_USER); return sysRoleService.getSystemRole(SysUser); } }
角色模块参数
package com.sf.detectcore.controller.role.model; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.util.List; /** * @ClassName AddRoleModel * @Description 新增角色参数实体类 * @Author YangLei * @Date 2019/5/14 10:31 * @Version 1.0 **/ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class AddRoleModel { @ApiModelProperty(value = "角色名称") @NotNull(message = "角色名称不能为空") private String name; @ApiModelProperty(value = "备注") private String remarks; }
package com.sf.detectcore.controller.role.model; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.List; /** * @ClassName EditRoleModel * @Description 编辑角色参数实体类 * @Author YangLei * @Date 2019/5/14 10:35 * @Version 1.0 **/ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class EditRoleModel implements Serializable { @ApiModelProperty(value = "自增id") @NotNull(message = "自增id不能为空") private Long roleId; @ApiModelProperty(value = "角色名称") @NotNull(message = "角色名称不能为空") private String name; @ApiModelProperty(value = "备注") private String remarks; }
package com.sf.detectcore.controller.role.model; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.util.List; /** * @description: * @author: 朱传捷 80004071 * @date: 2019-10-17 14:37 */ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class EditRoleVerifyModel { @ApiModelProperty(value = "自增id") @NotNull(message = "自增id不能为空") private Long roleId; @ApiModelProperty(value = "角色所拥有的权限id集合") private List<Long> permissionIds; }
package com.sf.detectcore.controller.role.model; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; /** * @ClassName RolePermissionParam * @Description TODO * @Author YangLei * @Date 2019/5/30 10:00 * @Version 1.0 **/ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class RolePermissionParam { /** * 权限父id */ private Long parentPermId; /** * 权限子id集合(包含多个父权限对应的子权限id) */ private List<Long> permIds; }
获取验证码工具类
package com.sf.detectcore.util; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; /** * @ClassName R * @Description 验证码工具类 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ public class VerifyCodeUtil { /** * 验证码类型为仅数字,即0~9 */ public static final int TYPE_NUM_ONLY = 0; /** * 验证码类型为仅字母,即大小写字母混合 */ public static final int TYPE_LETTER_ONLY = 1; /** * 验证码类型为数字和大小写字母混合 */ public static final int TYPE_ALL_MIXED = 2; /** * 验证码类型为数字和大写字母混合 */ public static final int TYPE_NUM_UPPER = 3; /** * 验证码类型为数字和小写字母混合 */ public static final int TYPE_NUM_LOWER = 4; /** * 验证码类型为仅大写字母 */ public static final int TYPE_UPPER_ONLY = 5; /** * 验证码类型为仅小写字母 */ public static final int TYPE_LOWER_ONLY = 6; private VerifyCodeUtil(){} /** * 生成随机颜色 */ private static Color generateRandomColor() { Random random = new Random(); return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); } /** * 生成图片验证码 * @param type 验证码类型,参见本类的静态属性 * @param length 验证码字符长度,要求大于0的整数 * @param excludeString 需排除的特殊字符 * @param width 图片宽度(注意此宽度若过小,容易造成验证码文本显示不全,如4个字符的文本可使用85到90的宽度) * @param height 图片高度 * @param interLine 图片中干扰线的条数 * @param randomLocation 每个字符的高低位置是否随机 * @param backColor 图片颜色,若为null则表示采用随机颜色 * @param foreColor 字体颜色,若为null则表示采用随机颜色 * @param lineColor 干扰线颜色,若为null则表示采用随机颜色 * @return 图片缓存对象 */ public static BufferedImage generateImageCode(int type, int length, String excludeString, int width, int height, int interLine, boolean randomLocation, Color backColor, Color foreColor, Color lineColor){ String textCode = generateTextCode(type, length, excludeString); return generateImageCode(textCode, width, height, interLine, randomLocation, backColor, foreColor, lineColor); } /** * 生成验证码字符串 * @param type 验证码类型,参见本类的静态属性 * @param length 验证码长度,要求大于0的整数 * @param excludeString 需排除的特殊字符(无需排除则为null) * @return 验证码字符串 */ public static String generateTextCode(int type, int length, String excludeString){ if(length <= 0){ return ""; } StringBuffer verifyCode = new StringBuffer(); int i = 0; Random random = new Random(); switch(type){ case TYPE_NUM_ONLY: while(i < length){ int t = random.nextInt(10); //排除特殊字符 if(null==excludeString || excludeString.indexOf(t+"")<0) { verifyCode.append(t); i++; } } break; case TYPE_LETTER_ONLY: while(i < length){ int t = random.nextInt(123); if((t>=97 || (t>=65&&t<=90)) && (null==excludeString||excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; case TYPE_ALL_MIXED: while(i < length){ int t = random.nextInt(123); if((t>=97 || (t>=65&&t<=90) || (t>=48&&t<=57)) && (null==excludeString||excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; case TYPE_NUM_UPPER: while(i < length){ int t = random.nextInt(91); if((t>=65 || (t>=48&&t<=57)) && (null==excludeString || excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; case TYPE_NUM_LOWER: while(i < length){ int t = random.nextInt(123); if((t>=97 || (t>=48&&t<=57)) && (null==excludeString || excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; case TYPE_UPPER_ONLY: while(i < length){ int t = random.nextInt(91); if((t >= 65) && (null==excludeString||excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; case TYPE_LOWER_ONLY: while(i < length){ int t = random.nextInt(123); if((t>=97) && (null==excludeString||excludeString.indexOf((char)t)<0)){ verifyCode.append((char)t); i++; } } break; } return verifyCode.toString(); } /** * 已有验证码,生成验证码图片 * @param textCode 文本验证码 * @param width 图片宽度(注意此宽度若过小,容易造成验证码文本显示不全,如4个字符的文本可使用85到90的宽度) * @param height 图片高度 * @param interLine 图片中干扰线的条数 * @param randomLocation 每个字符的高低位置是否随机 * @param backColor 图片颜色,若为null则表示采用随机颜色 * @param foreColor 字体颜色,若为null则表示采用随机颜色 * @param lineColor 干扰线颜色,若为null则表示采用随机颜色 * @return 图片缓存对象 */ public static BufferedImage generateImageCode(String textCode, int width, int height, int interLine, boolean randomLocation, Color backColor, Color foreColor, Color lineColor){ //创建内存图像 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //获取图形上下文 Graphics graphics = bufferedImage.getGraphics(); //画背景图 graphics.setColor(null==backColor ? generateRandomColor() : backColor); graphics.fillRect(0, 0, width, height); //画干扰线 Random random = new Random(); if(interLine > 0){ int x = 0, y = 0, x1 = width, y1 = 0; for(int i=0; i<interLine; i++){ graphics.setColor(null==lineColor ? generateRandomColor() : lineColor); y = random.nextInt(height); y1 = random.nextInt(height); graphics.drawLine(x, y, x1, y1); } } //字体大小为图片高度的80% int fsize = (int)(height * 0.8); int fx = height - fsize; int fy = fsize; //设定字体 graphics.setFont(new Font("Default", Font.PLAIN, fsize)); //写验证码字符 for(int i=0; i<textCode.length(); i++){ fy = randomLocation ? (int)((Math.random()*0.3+0.6)*height) : fy; graphics.setColor(null==foreColor ? generateRandomColor() : foreColor); //将验证码字符显示到图象中 graphics.drawString(textCode.charAt(i)+"", fx, fy); fx += fsize * 0.9; } graphics.dispose(); return bufferedImage; } }
redis工具类
package com.sf.detectcore.util.redis; import com.sf.detectcore.config.constant.SystemConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; /** * @ClassName RedisUtil * @Description RedisUtil工具类 * @Author huyong * @Date 2019/10/14 18:23 * @Version 1.0 */ @Component public class RedisUtil { @Autowired private RedisTemplate redisTemplate; public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } /** * @Description: 指定缓存失效时间 * @param key * @param time 时间(秒) * @return */ public boolean expire(String key,long time){ try { if(time>0){ redisTemplate.expire(SystemConstants.REDIS_KEY_PREFIX+key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * @Description: 根据key 获取过期时间 * @param key * @return 时间(秒) 返回0代表为永久有效 */ public long getExpire(String key){ return redisTemplate.getExpire(SystemConstants.REDIS_KEY_PREFIX+key,TimeUnit.SECONDS); } /** * @Decription: 判断key是否存在 * @param key * @return true 存在 false不存在 */ public boolean hasKey(String key){ try { return redisTemplate.hasKey(SystemConstants.REDIS_KEY_PREFIX+key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * @Decription: 删除缓存 * @param key 可以传一个值 或多个 */ public void del(String ... key){ if(key!=null&&key.length>0){ if(key.length==1){ redisTemplate.delete(SystemConstants.REDIS_KEY_PREFIX+key[0]); }else{ redisTemplate.delete(CollectionUtils.arrayToList(SystemConstants.REDIS_KEY_PREFIX+key)); } } } /** * @DesCription: 普通缓存获取 * @param key * @return */ public Object get(String key){ return key==null?null:redisTemplate.opsForValue().get(SystemConstants.REDIS_KEY_PREFIX+key); } /** * @Description: 普通缓存放入 * @param key * @param value * @return */ public boolean set(String key,Object value) { try { redisTemplate.opsForValue().set(SystemConstants.REDIS_KEY_PREFIX+key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * @Description: 普通缓存放入并设置时间 * @param key * @param value * @param time * @return */ public boolean set(String key,Object value,long time){ try { if(time>0){ redisTemplate.opsForValue().set(SystemConstants.REDIS_KEY_PREFIX+key, value, time, TimeUnit.SECONDS); }else{ redisTemplate.opsForValue().set(SystemConstants.REDIS_KEY_PREFIX+key, value); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 递增 * @param key 键 * @param by 要增加几(大于0) * @return */ public long incr(String key, long delta){ if(delta<0){ throw new RuntimeException("递增因子必须大于0"); } return redisTemplate.opsForValue().increment(SystemConstants.REDIS_KEY_PREFIX+key, delta); } /** * 递减 * @param key 键 * @param by 要减少几(小于0) * @return */ public long decr(String key, long delta){ if(delta<0){ throw new RuntimeException("递减因子必须大于0"); } return redisTemplate.opsForValue().increment(SystemConstants.REDIS_KEY_PREFIX+key, -delta); } //================================Map================================= /** * HashGet * @param key 键 不能为null * @param item 项 不能为null * @return 值 */ public Object hget(String key,String item){ return redisTemplate.opsForHash().get(SystemConstants.REDIS_KEY_PREFIX+key, item); } /** * 获取hashKey对应的所有键值 * @param key 键 * @return 对应的多个键值 */ public Map<Object,Object> hmget(String key){ return redisTemplate.opsForHash().entries(SystemConstants.REDIS_KEY_PREFIX+key); } /** * HashSet * @param key 键 * @param map 对应多个键值 * @return true 成功 false 失败 */ public boolean hmset(String key, Map<String,Object> map){ try { redisTemplate.opsForHash().putAll(SystemConstants.REDIS_KEY_PREFIX+key, map); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * HashSet 并设置时间 * @param key 键 * @param map 对应多个键值 * @param time 时间(秒) * @return true成功 false失败 */ public boolean hmset(String key, Map<String,Object> map, long time){ try { redisTemplate.opsForHash().putAll(SystemConstants.REDIS_KEY_PREFIX+key, map); if(time>0){ expire(SystemConstants.REDIS_KEY_PREFIX+key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 向一张hash表中放入数据,如果不存在将创建 * @param key 键 * @param item 项 * @param value 值 * @return true 成功 false失败 */ public boolean hset(String key,String item,Object value) { try { redisTemplate.opsForHash().put(SystemConstants.REDIS_KEY_PREFIX+key, item, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 向一张hash表中放入数据,如果不存在将创建 * @param key 键 * @param item 项 * @param value 值 * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 * @return true 成功 false失败 */ public boolean hset(String key,String item,Object value,long time) { try { redisTemplate.opsForHash().put(SystemConstants.REDIS_KEY_PREFIX+key, item, value); if(time>0){ expire(SystemConstants.REDIS_KEY_PREFIX+key, time); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除hash表中的值 * @param key 键 不能为null * @param item 项 可以使多个 不能为null */ public void hdel(String key, Object... item){ redisTemplate.opsForHash().delete(SystemConstants.REDIS_KEY_PREFIX+key,item); } /** * 判断hash表中是否有该项的值 * @param key 键 不能为null * @param item 项 不能为null * @return true 存在 false不存在 */ public boolean hHasKey(String key, String item){ return redisTemplate.opsForHash().hasKey(SystemConstants.REDIS_KEY_PREFIX+key, item); } /** * hash递增 如果不存在,就会创建一个 并把新增后的值返回 * @param key 键 * @param item 项 * @param by 要增加几(大于0) * @return */ public double hincr(String key, String item,double by){ return redisTemplate.opsForHash().increment(SystemConstants.REDIS_KEY_PREFIX+key, item, by); } /** * hash递减 * @param key 键 * @param item 项 * @param by 要减少记(小于0) * @return */ public double hdecr(String key, String item,double by){ return redisTemplate.opsForHash().increment(SystemConstants.REDIS_KEY_PREFIX+key, item,-by); } //============================set============================= /** * 根据key获取Set中的所有值 * @param key 键 * @return */ public Set<Object> sGet(String key){ try { return redisTemplate.opsForSet().members(SystemConstants.REDIS_KEY_PREFIX+key); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 根据value从一个set中查询,是否存在 * @param key 键 * @param value 值 * @return true 存在 false不存在 */ public boolean sHasKey(String key,Object value){ try { return redisTemplate.opsForSet().isMember(SystemConstants.REDIS_KEY_PREFIX+key, value); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将数据放入set缓存 * @param key 键 * @param values 值 可以是多个 * @return 成功个数 */ public long sSet(String key, Object...values) { try { return redisTemplate.opsForSet().add(SystemConstants.REDIS_KEY_PREFIX+key, values); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 将set数据放入缓存 * @param key 键 * @param time 时间(秒) * @param values 值 可以是多个 * @return 成功个数 */ public long sSetAndTime(String key,long time,Object...values) { try { Long count = redisTemplate.opsForSet().add(SystemConstants.REDIS_KEY_PREFIX+key, values); if(time>0) { expire(SystemConstants.REDIS_KEY_PREFIX + key, time); } return count; } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 获取set缓存的长度 * @param key 键 * @return */ public long sGetSetSize(String key){ try { return redisTemplate.opsForSet().size(SystemConstants.REDIS_KEY_PREFIX+key); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 移除值为value的 * @param key 键 * @param values 值 可以是多个 * @return 移除的个数 */ public long setRemove(String key, Object ...values) { try { Long count = redisTemplate.opsForSet().remove(SystemConstants.REDIS_KEY_PREFIX+key, values); return count; } catch (Exception e) { e.printStackTrace(); return 0; } } //===============================list================================= /** * 获取list缓存的内容 * @param key 键 * @param start 开始 * @param end 结束 0 到 -1代表所有值 * @return */ public List<Object> lGet(String key, long start, long end){ try { return redisTemplate.opsForList().range(SystemConstants.REDIS_KEY_PREFIX+key, start, end); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 获取list缓存的长度 * @param key 键 * @return */ public long lGetListSize(String key){ try { return redisTemplate.opsForList().size(SystemConstants.REDIS_KEY_PREFIX+key); } catch (Exception e) { e.printStackTrace(); return 0; } } /** * 通过索引 获取list中的值 * @param key 键 * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 * @return */ public Object lGetIndex(String key,long index){ try { return redisTemplate.opsForList().index(SystemConstants.REDIS_KEY_PREFIX+key, index); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 将list放入缓存 * @param key 键 * @param value 值 * @param time 时间(秒) * @return */ public boolean lSet(String key, Object value) { try { redisTemplate.opsForList().rightPush(SystemConstants.REDIS_KEY_PREFIX+key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将list放入缓存 * @param key 键 * @param value 值 * @param time 时间(秒) * @return */ public boolean lSet(String key, Object value, long time) { try { redisTemplate.opsForList().rightPush(SystemConstants.REDIS_KEY_PREFIX+key, value); if (time > 0) {expire(key, time);} return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将list放入缓存 * @param key 键 * @param value 值 * @param time 时间(秒) * @return */ public boolean lSet(String key, List<Object> value) { try { redisTemplate.opsForList().rightPushAll(SystemConstants.REDIS_KEY_PREFIX+key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将list放入缓存 * @param key 键 * @param value 值 * @param time 时间(秒) * @return */ public boolean lSet(String key, List<Object> value, long time) { try { redisTemplate.opsForList().rightPushAll(SystemConstants.REDIS_KEY_PREFIX+key, value); if (time > 0) {expire(key, time);} return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据索引修改list中的某条数据 * @param key 键 * @param index 索引 * @param value 值 * @return */ public boolean lUpdateIndex(String key, long index,Object value) { try { redisTemplate.opsForList().set(SystemConstants.REDIS_KEY_PREFIX+key, index, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 移除N个值为value * @param key 键 * @param count 移除多少个 * @param value 值 * @return 移除的个数 */ public long lRemove(String key,long count,Object value) { try { Long remove = redisTemplate.opsForList().remove(SystemConstants.REDIS_KEY_PREFIX+key, count, value); return remove; } catch (Exception e) { e.printStackTrace(); return 0; } } }
项目配置文件
#RSA公私钥 RSA: privateKey: ***** publicKey: ****** #shiro超时时间 shiro: timeout: 7200000
项目maven依赖
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- SpringBoot AOP包,用于Shiro授权 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--Shiro核心包 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version> </dependency> <!-- RSA加解密时BASE64相关jar包 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.60</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <version>5.1.2.RELEASE</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <scope>provided</scope> </dependency>