中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Springboot shiro認證授權的詳解

發布時間:2020-06-23 18:31:57 來源:億速云 閱讀:178 作者:清晨 欄目:編程語言

不懂怎么解決Springboot shiro認證授權?其實這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

認證授權需要的數據表有:用戶表,角色表,用戶角色關聯表,權限表,角色權限關聯表,一次如下

關于Springboot shiro認證授權的詳解關于Springboot shiro認證授權的詳解關于Springboot shiro認證授權的詳解

關于Springboot shiro認證授權的詳解關于Springboot shiro認證授權的詳解

之前寫過了shiro的登錄認證,在自定義的realm中,我們實現AuthorizingRealm接口中的方法:package com.zs.springboot.realm;

import com.zs.springboot.model.User;
import com.zs.springboot.service.UserService;
import com.zs.springboot.util.ResultUtil;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Map;

/**
 * @author zs
 * 登錄realm
 */
public class LoginRealm extends AuthorizingRealm {

  @Autowired
  private UserService userService;
  /**
   * 授權方法,只有頁面出現關于權限標簽的時候或者項目中關于授權注解的時候,才可以被使用
   * @param principal
   * @return
   */
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) { 
    User user = (User) principal.getPrimaryPrincipal();
    Map<String, Object> resultMap1 = userService.getRoleByUid(user.getUid());
    //獲取角色,通過多表查詢獲取用戶對應的角色
    List<String> roleList = (List<String>) ResultUtil.getResult(resultMap1);
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    info.addRoles(roleList);
    //獲取權限,通過關聯中間表,多表查詢出該用戶對應的角色所擁有的權限
    Map<String, Object> resultMap2 = userService.getPromessionByUid(user.getUid());
    List<String> permissionList = (List<String>) ResultUtil.getResult(resultMap2);
    info.addStringPermissions(permissionList);
    return info;
  }

  /**
   * 認證方法
   * @param token
   * @return
   * @throws AuthenticationException
   */
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    //獲取當前登錄的用戶名
    String username = (String) token.getPrincipal();
    //根據用戶到數據庫搜索用戶信息
    Map<String, Object> login = userService.login(username);
    //如果用戶不存在則拋出異常
    if ((Integer) login.get("code") == 404) {
      throw new UnknownAccountException("用戶不存在");
    }
    //如果用戶存在,獲取用戶信息
    User user = (User) login.get("result");
    //進行認證
    SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), ByteSource.Util.bytes(user.getSalt()), this.getName());
    //將用戶信息放入session中,密碼制空
    Session session = SecurityUtils.getSubject().getSession();
    user.setPassword(null);
    session.setAttribute("user", user);
    return info;
  }
}

注意,在授權方法中,principal.getPrimaryPrincipal()方法;如果在認證方法中,simpleAuthenticationInfo對象中傳遞的第一個參數如果為obj對象,則返回值為對象(可以強轉為User對象),如果傳遞的時username字符串,則返回的是username字符串,字符串是不能強轉為User對象的。

感謝你能夠認真閱讀完這篇文章,希望小編分享關于Springboot shiro認證授權的詳解內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙陵县| 龙门县| 正阳县| 五峰| 彭阳县| 都匀市| 岫岩| 乌拉特前旗| 洞口县| 五寨县| 始兴县| 延寿县| 留坝县| 肥东县| 嘉黎县| 阿尔山市| 罗平县| 杭锦后旗| 诸城市| 岑巩县| 措勤县| 三亚市| 黄大仙区| 文登市| 大石桥市| 菏泽市| 德清县| 广州市| 瑞金市| 长治县| 大荔县| 竹山县| 新疆| 铜山县| 宜黄县| 漳州市| 肥乡县| 洛隆县| 于都县| 岚皋县| 蓬莱市|