SasSHRM中基于shiro的认证授权:环境搭建
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ihrm</groupId><artifactId>ihrm_parent</artifactId><version>1.0-SNAPSHOT</version><modules><module>ihrm_common</module><module>ihrm_common_model</module><module>ihrm_common</module><module>ihrm_common_model</module><module>ihrm_company</module><module>ihrm_system</module></modules><packaging>pom</packaging><name>ihrm_parent</name><description>IHRM-黑马程序员</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><fastjson.version>1.2.47</fastjson.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version></dependency><!--shiro和spring整合--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency><!--shiro核心包--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.3.2</version></dependency><!--shiro与redis整合--><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>3.0.0</version></dependency></dependencies><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></pluginRepository><pluginRepository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories><build><plugins><!--编译插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!--单元测试插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build>
</project>
package com.learn.common.shiro.session;import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.util.StringUtils;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.Serializable;public class CustomSessionManager extends DefaultWebSessionManager {/*** 头信息中具有sessionid* 请求头:Authorization: sessionid** 指定sessionId的获取方式*/protected Serializable getSessionId(ServletRequest request, ServletResponse response) {//获取请求头Authorization中的数据String id = WebUtils.toHttp(request).getHeader("Authorization");if(StringUtils.isEmpty(id)) {//如果没有携带,生成新的sessionIdreturn super.getSessionId(request,response);}else{//请求头信息:bearer sessionidid = id.replaceAll("Bearer ","");//返回sessionId;request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, "header");request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, id);request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);return id;}}
}
package com.learn.common.shiro.realm;import com.learn.domain.system.response.ProfileResult;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;import java.util.Set;// 公共的realm:获取安全数据,构造权限信息
public class IhrmRealm extends AuthorizingRealm {public void setName(String name) {super.setName("learnRealm");}//授权方法protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {//1.获取安全数据ProfileResult result = (ProfileResult)principalCollection.getPrimaryPrincipal();//2.获取权限信息Set<String> apisPerms = (Set<String>)result.getRoles().get("apis");//3.构造权限数据,返回值SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();info.setStringPermissions(apisPerms);return info;}//认证方法protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {return null;}
}
package com.learn.system.shiro.realm;import com.learn.common.shiro.realm.IhrmRealm;
import com.learn.domain.system.Permission;
import com.learn.domain.system.User;
import com.learn.domain.system.response.ProfileResult;
import com.learn.system.service.PermissionService;
import com.learn.system.service.UserService;
import org.apache.shiro.authc.*;
import org.springframework.beans.factory.annotation.Autowired;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class UserRealm extends IhrmRealm {@Autowiredprivate UserService userService;@Autowiredprivate PermissionService permissionService;//认证方法protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//1.获取用户的手机号和密码UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;String mobile = upToken.getUsername();String password = new String( upToken.getPassword());//2.根据手机号查询用户User user = userService.findByMobile(mobile);//3.判断用户是否存在,用户密码是否和输入密码一致if(user != null && user.getPassword().equals(password)) {//4.构造安全数据并返回(安全数据:用户基本数据,权限信息 profileResult)ProfileResult result = null;if("user".equals(user.getLevel())) {result = new ProfileResult(user);}else {Map map = new HashMap();if("coAdmin".equals(user.getLevel())) {map.put("enVisible","1");}List<Permission> list = permissionService.findAll(map);result = new ProfileResult(user,list);}//构造方法:安全数据,密码,realm域名SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(result,user.getPassword(),this.getName());return info;}//返回null,会抛出异常,标识用户名和密码不匹配return null;}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>ihrm_parent</artifactId><groupId>com.ihrm</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>ihrm_common</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.6.0</version></dependency><dependency><groupId>com.ihrm</groupId><artifactId>ihrm_common_model</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>
package com.learn.domain.system.response;import com.learn.domain.system.Permission;
import com.learn.domain.system.Role;
import com.learn.domain.system.User;
import lombok.Getter;
import lombok.Setter;
import org.crazycake.shiro.AuthCachePrincipal;import java.io.Serializable;
import java.util.*;@Setter
@Getter
public class ProfileResult implements Serializable,AuthCachePrincipal {private String mobile;private String username;private String company;private String companyId;private Map<String,Object> roles = new HashMap<>();/**** @param user*/public ProfileResult(User user, List<Permission> list) {this.mobile = user.getMobile();this.username = user.getUsername();this.company = user.getCompanyName();this.companyId = user.getCompanyId();Set<String> menus = new HashSet<>();Set<String> points = new HashSet<>();Set<String> apis = new HashSet<>();for (Permission perm : list) {String code = perm.getCode();if(perm.getType() == 1) {menus.add(code);}else if(perm.getType() == 2) {points.add(code);}else {apis.add(code);}}this.roles.put("menus",menus);this.roles.put("points",points);this.roles.put("apis",apis);}public ProfileResult(User user) {this.mobile = user.getMobile();this.username = user.getUsername();this.company = user.getCompanyName();this.companyId = user.getCompanyId();Set<Role> roles = user.getRoles();Set<String> menus = new HashSet<>();Set<String> points = new HashSet<>();Set<String> apis = new HashSet<>();for (Role role : roles) {Set<Permission> perms = role.getPermissions();for (Permission perm : perms) {String code = perm.getCode();if(perm.getType() == 1) {menus.add(code);}else if(perm.getType() == 2) {points.add(code);}else {apis.add(code);}}}this.roles.put("menus",menus);this.roles.put("points",points);this.roles.put("apis",apis);}@Overridepublic String getAuthCacheKey() {return null;}
}
SasSHRM中基于shiro的认证授权:环境搭建相关推荐
- SasSHRM中基于shiro的认证授权:系统微服务配置shiro
#服务配置 server:port: 9002 #spring配置 spring:#1.应用配置application:name: ihrm-system #指定服务名#2.数据库连接池datasou ...
- SasSHRM中基于shiro的认证授权:需求分析
- 从零开始 Mask RCNN 实战:基于 Win10 + Anaconda 的 MaskRCNN 环境搭建
大名鼎鼎的 Mask RCNN 一举夺得 ICCV2017 Best Paper,名声大造.Mask RCNN 是何恺明基于以往的 Faster RCNN 架构提出的新的卷积网络,实现高效地检测图中的 ...
- 基于IDEA的JavaWeb开发环境搭建
基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 ...
- Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建
Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建 简介 1. JDK环境搭建 JDK下载 JDK环境安装 2. 工业相机环境SDK安装 简介 本文主要介绍在ubun ...
- 测试小白基于java的selenium自动化测试环境搭建
本人是一个软件测试小白,自己在研究自动化测试时,真的入了不少坑,直到现在,才勉强将环境搭建了起来. 在此,我随随便便总结了一下基于java的selenium自动化测试环境搭建,送给正在学习软件测试的你 ...
- 基于RK3308的ROS运行环境搭建和交叉编译
基于RK3308的ROS运行环境搭建和交叉编译 固件编译环境 准备工作 软件包安装 交叉编译工具链介绍 下载 SDK SDK 目录结构 全自动编译脚本 烧写镜像文件 第一步,编译固件(ubuntu18 ...
- 基于vs2019的虚幻4环境搭建
基于vs2019的虚幻4环境搭建 1.准备工作 进入虚幻引擎官网注册登录Epic Games账户(受网络影响,推荐使用游戏加速器加速) 在虚幻引擎官网下载Epic Games启动程序并安装 打开Epi ...
- android单元测试android环境,基于Robolectric的Android单元测试 —环境搭建与部署运行...
移动端的测试中,因为回归一些逻辑分支比较多的功能时工作量比较大,且不太适合用UI完成,尝试通过单元测试来完成.几经波折终于完成了一个功能的UT用例并在CI上部署运行,现总结如下: 一.Robolect ...
最新文章
- 阿里云https认证
- JavaScript 事件冒泡简介及应用(转)
- 波卡链Substrate (6)SubstrateUI界面
- java观察者模式在spring中的应用_利用spring自己实现观察者模式
- android simples 结构,android – 如何在simple_list_item_2中构造和显示信息?
- linux系统下deepin eclipse不能显示源码报class File Editor Source not found
- 【JavaScript】修改图片src属性切换图片
- kickstart research
- 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
- Dubbo(一)之简介
- 面试必备:synchronized的底层原理?
- int *p = *******a是什么鬼?
- 菜鸟ING的博客终于开园了。
- 使用GridFsTemplate来实现文件归类
- string获取 倒数 下标_NBA球星福克斯沉迷LOL,排名美服倒数98名!胜率太真实了...
- 这种简历咋找工作?(运营)
- 思科网院计算机应用基础答案,计算机应用基础试题及答案
- [About Design] 各类素材网站
- 国土档案管理信息系统【辅助说明】
- 项目经历——地图定位神器