SpringBoot整合Shiro如何配置项目开发环境

2024-10-14 08:51:58

1、Shiro是现在最为流行饿权限认证开发框架,与它齐名只有最初的SpringSecurity(这个开发框架非常不好用,但是千万不要以为SpringSecurity没有用处,它在SpringCloud阶段将发挥重大的作用)。但是现在如果要想整合Shiro开发框架,有一点很遗憾,SpringBoot没有直接的配置支持,它不像整合所谓的Kafka、Redis、DataSource,也就是说如果要想整合Shiro开发框架那么就必须自己来进行配置。在整个的Shiro之中最为重要的部分:认证以及授权处理(Realm),在Realm里面实际上在开发之中所需要调用的业务方法只有两类:根据用户编号取得用户的完整信息,在认证通过之后根据用户编号获得用户对应的所有的角色以及权限信息,而且既然已经到了微架构的阶段,那么不得不去面对一个问题,对于这种用户的业务操作是放在WEB端还是单独提出来做成一个Rest服务?很明显,应该作为一个服务进行抽象出来,也就是说在整体的调用处理之中,Realm需要进行Rest服务调用(RestTemplate存在可以让整个的调用更加容易)。那么按照如下的设计方法,现在的整体的项目里面认为应该包含有如下的几个开发模块: 1、microboot-shiro-api:应该提供有服务的VO类、各种加密处理的工具类; 2、microboot-shiro-member-provider:进行用户认证与授权Rest服务的提供,要暴露两个接口:用户信息获得、角色与权限信息获得; 3、microboot-shiro-web:主要进行shiro的认证与授权检测处理。

SpringBoot整合Shiro如何配置项目开发环境

2、创建微服务项目microboot-shiro-member-provider:进行用户认证与授权Rest服务的提供,要暴露两个接口:用户信息获得、角色与权限信息获得

SpringBoot整合Shiro如何配置项目开发环境

3、创建微服务项目microboot-shiro-api:提供有服务的VO类、各种加密处理的工具类

SpringBoot整合Shiro如何配置项目开发环境

4、【microboot-shiro-member-provider】保存本次的数据库脚本:drop database if exists shirodb;create database shirodb character set utf8;use shirodb;create table member ( mid varchar(50), password varchar(32), name varchar(20), locked int, constraint pk_mid primary key(mid));insert into member(mid,password,name,locked) values('admin','hello','管理员',0);insert into member(mid,password,name,locked) values('mldn','java','隔壁老王',0);create table role (rid int auto_increment,title varchar(50),flag varchar(50),constraint pk_rid primary key (rid));create table member_role (mid varchar(50),rid int);create table action (actid int auto_increment,title varchar(50),flag varchar(50),constraint pk_actid primary key (actid));create table role_action (rid int,actid int);

SpringBoot整合Shiro如何配置项目开发环境

5、下面为开发做一些基础准备:【microboot-shiro-api】建立一个Member程序类:保存认证返回的信息: Shiro进行认证处理的时候是要嫫绑臾潜求根据一个用户的编号获得用户对应的完整信息,而后再进行用户是否存在的判断,密码是否正确的判断,是否被锁定的判断。package com.gwolf.vo;import org.hibernate.validator.constraints.Email;import javax.validation.constraints.Digits;import javax.validation.constraints.NotNull;import java.util.Date;public class Member implements java.io.Serializable{ private String mid; private String name; private String password; private Integer locked; public String getMid() { return mid; } public void setMid(String mid) { this.mid = mid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getLocked() { return locked; } @Override public String toString() { return "Member{" + "mid='" + mid + '\'' + ", name='" + name + '\'' + ", password='" + password + '\'' + ", locked=" + locked + '}'; } public void setLocked(Integer locked) { this.locked = locked; }}

SpringBoot整合Shiro如何配置项目开发环境

6、【microboot-shiro-api】既然有密码的加密处理,将之前所编写过的Base64+MD5的加密程序工具类配置到项目之中:package com.gwolf.utils;import java.security.MessageDigest;public class MD5Code { private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb = new StringBuffer(); for (int i = 0; i < b.length; i++) resultSb.append(byteToHexString(b[i])); return resultSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) n += 256; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); if (charsetname == null || "".equals(charsetname)) resultString = byteArrayToHexString(md.digest(resultString .getBytes())); else resultString = byteArrayToHexString(md.digest(resultString .getBytes(charsetname))); } catch (Exception exception) { } return resultString; }}package com.gwolf.utils.encrypt;import com.gwolf.utils.MD5Code;public class MyPasswordEncrypt { private static final String SALt = "d3d3LmJhaWR1LmNvbQ=="; public static String encryptPassword(String password) { return MD5Code.MD5Encode(password+"{{"+SALt+"}}","utf-8"); }}

SpringBoot整合Shiro如何配置项目开发环境
猜你喜欢