日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02

發(fā)布時間:2024/10/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代碼延續(xù)地址:Shiro+springboot+mybatis(md5+salt+散列)認(rèn)證與授權(quán)-01


1.創(chuàng)建t_role角色表(比如管理員admin,普通用戶user等),創(chuàng)建t_pers權(quán)限表(比如add,update,delete等),t_user_role與t_role_pers作為三個表的中間表(因為這三個表之間是多對多的關(guān)系)


2.UserMapper.xml新增sql查詢

<select id="findByRolesUserName" parameterType="String" resultMap="userMap">select u.id uid,u.username,r.id rid,r.namefrom t_user uleft join t_user_role uron u.id=ur.userIdleft join t_role ron ur.roleId=r.idwhere u.username=#{username};</select><select id="findPermsByRoleId" parameterType="String" resultType="com.hao.springboot.entity.Pers">select p.id,p.name,p.url,r.namefrom t_role rleft join t_role_pers rpon r.id=rp.roleIdleft join t_pers pon p.id=rp.persIdwhere r.id=#{id}</select>

3.UserDao新增方法

//根據(jù)用戶名查詢所有角色User findByRolesUserName(String username);//根據(jù)角色id查詢權(quán)限集合List<Pers> findPermsByRoleId(String id);

4.Service層新增方法(接口代碼省略)

@Overridepublic User findByRolesUserName(String username) {return userDao.findByRolesUserName(username);}@Overridepublic List<Pers> findPermsByRoleId(String id) {return userDao.findPermsByRoleId(id);}

5.改變自定義realm

/*** @author:抱著魚睡覺的喵喵* @date:2020/12/29* @description: 自定義realm完成用戶認(rèn)證和授權(quán)*/ public class CustomerRealm extends AuthorizingRealm {/*** 用戶授權(quán)* @param principalCollection* @return*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("調(diào)用權(quán)限認(rèn)證:"+principalCollection);String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();//調(diào)用身份信息獲取角色和權(quán)限信息UserService userService = (UserService) ApplicationContextUtils.getBean("userService");//根據(jù)主身份獲取角色和權(quán)限信息User users = userService.findByRolesUserName(primaryPrincipal);//授權(quán)角色信息if (!CollectionUtils.isEmpty(users.getRoles())){SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();users.getRoles().forEach(role -> {simpleAuthorizationInfo.addRole(role.getName());List<Pers> perms = userService.findPermsByRoleId(role.getId());if (!CollectionUtils.isEmpty(perms)){perms.forEach(pers -> {simpleAuthorizationInfo.addStringPermission(pers.getName());});}});return simpleAuthorizationInfo;}return null;}/*** 用戶認(rèn)證* @param authenticationToken* @return* @throws AuthenticationException*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {String principal = (String) authenticationToken.getPrincipal();//在工廠中獲取業(yè)務(wù)對象UserService userService = (UserService) ApplicationContextUtils.getBean("userService");User user = userService.findByUserName(principal);if (!ObjectUtils.isEmpty(user)){return new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(), ByteSource.Util.bytes(user.getSalt()),this.getName());}return null;} }

6.index.jsp

<%@page contentType="text/html; utf-8" pageEncoding="UTF-8" isELIgnored="false" %> <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> <!doctype html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body><h1>系統(tǒng)主頁,歡迎你的到來</h1><a href="${pageContext.request.contextPath}/user/outLogin">退出</a><ul><shiro:hasAnyRoles name="user"><li><a href="">用戶管理</a><ul><shiro:hasPermission name="user:add:*"><li><a href="">添加用戶</a></li></shiro:hasPermission><li><a href="">刪除用戶</a></li><li><a href="">修改用戶</a></li><li><a href="">查詢用戶</a></li></ul></li></shiro:hasAnyRoles><shiro:hasRole name="product"><li><a href="">部分格式化</a> </li></shiro:hasRole><shiro:hasRole name="admin"><li><a href="">商品管理</a> </li><li><a href="">訂單管理</a> </li><li><a href="">物流管理</a> </li></shiro:hasRole><shiro:hasRole name="shper"><li><a href="">終極格式化</a> </li></shiro:hasRole></ul> </body> </html>

7.訪問http://localhost:8080/shiro/login.jsp


退出

總結(jié)

以上是生活随笔為你收集整理的Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。