<?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的认证授权:环境搭建相关推荐

  1. SasSHRM中基于shiro的认证授权:系统微服务配置shiro

    #服务配置 server:port: 9002 #spring配置 spring:#1.应用配置application:name: ihrm-system #指定服务名#2.数据库连接池datasou ...

  2. SasSHRM中基于shiro的认证授权:需求分析

  3. 从零开始 Mask RCNN 实战:基于 Win10 + Anaconda 的 MaskRCNN 环境搭建

    大名鼎鼎的 Mask RCNN 一举夺得 ICCV2017 Best Paper,名声大造.Mask RCNN 是何恺明基于以往的 Faster RCNN 架构提出的新的卷积网络,实现高效地检测图中的 ...

  4. 基于IDEA的JavaWeb开发环境搭建

    基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 ...

  5. Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建

    Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建 简介 1. JDK环境搭建 JDK下载 JDK环境安装 2. 工业相机环境SDK安装 简介 本文主要介绍在ubun ...

  6. 测试小白基于java的selenium自动化测试环境搭建

    本人是一个软件测试小白,自己在研究自动化测试时,真的入了不少坑,直到现在,才勉强将环境搭建了起来. 在此,我随随便便总结了一下基于java的selenium自动化测试环境搭建,送给正在学习软件测试的你 ...

  7. 基于RK3308的ROS运行环境搭建和交叉编译

    基于RK3308的ROS运行环境搭建和交叉编译 固件编译环境 准备工作 软件包安装 交叉编译工具链介绍 下载 SDK SDK 目录结构 全自动编译脚本 烧写镜像文件 第一步,编译固件(ubuntu18 ...

  8. 基于vs2019的虚幻4环境搭建

    基于vs2019的虚幻4环境搭建 1.准备工作 进入虚幻引擎官网注册登录Epic Games账户(受网络影响,推荐使用游戏加速器加速) 在虚幻引擎官网下载Epic Games启动程序并安装 打开Epi ...

  9. android单元测试android环境,基于Robolectric的Android单元测试 —环境搭建与部署运行...

    移动端的测试中,因为回归一些逻辑分支比较多的功能时工作量比较大,且不太适合用UI完成,尝试通过单元测试来完成.几经波折终于完成了一个功能的UT用例并在CI上部署运行,现总结如下: 一.Robolect ...

最新文章

  1. 阿里云https认证
  2. JavaScript 事件冒泡简介及应用(转)
  3. 波卡链Substrate (6)SubstrateUI界面
  4. java观察者模式在spring中的应用_利用spring自己实现观察者模式
  5. android simples 结构,android – 如何在simple_list_item_2中构造和显示信息?
  6. linux系统下deepin eclipse不能显示源码报class File Editor Source not found
  7. 【JavaScript】修改图片src属性切换图片
  8. kickstart research
  9. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
  10. Dubbo(一)之简介
  11. 面试必备:synchronized的底层原理?
  12. int *p = *******a是什么鬼?
  13. 菜鸟ING的博客终于开园了。
  14. 使用GridFsTemplate来实现文件归类
  15. string获取 倒数 下标_NBA球星福克斯沉迷LOL,排名美服倒数98名!胜率太真实了...
  16. 这种简历咋找工作?(运营)
  17. 思科网院计算机应用基础答案,计算机应用基础试题及答案
  18. [About Design] 各类素材网站
  19. 国土档案管理信息系统【辅助说明】
  20. 项目经历——地图定位神器

热门文章

  1. ETL学习之四:SQL Server Integration Services入门
  2. “许巍日”新歌提前曝光 《爱如少年》10/15温暖登场!
  3. 【SpringBoot】在SpringBoot中使用Ehcache
  4. excel2010冻结行列
  5. 2018集训队日常训练1
  6. S3C2440 IIS操作 uda134x录放音
  7. 我的web聊天之---序章
  8. 转载-extern “C”用法分析
  9. Asp.Net MVC 使用FileResult导出Excel数据文件
  10. setsockopt的作用