91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Springboot整合Shiro的代碼實例

發布時間:2020-10-07 22:49:46 來源:腳本之家 閱讀:165 作者:清水有丶白 欄目:編程語言

這篇文章主要介紹了Springboot整合Shiro的代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、導入依賴

<!--shiro-->
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-spring</artifactId>
  <version>1.4.0</version>
</dependency>

2、創建ShiroRealm.java文件

(這里按照需求,只做登錄認證這塊)

package com.hyqfx.manager.shiro;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.hyqfx.manager.entity.po.SystemAdmin;
import com.hyqfx.manager.service.ISystemAdminService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;

public class ShiroRealm extends AuthorizingRealm {

  @Autowired
  private ISystemAdminService adminService;

  //授權
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    /*
    //獲取登錄用戶名
    String name= (String) principalCollection.getPrimaryPrincipal();
    //查詢用戶名稱
    User user = loginService.findByName(name);
    //添加角色和權限
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    for (Role role:user.getRoles()) {
      //添加角色
      simpleAuthorizationInfo.addRole(role.getRoleName());
      for (Permission permission:role.getPermissions()) {
        //添加權限
        simpleAuthorizationInfo.addStringPermission(permission.getPermission());
      }
    }
    return simpleAuthorizationInfo;*/


    return null;
  }

  //認證
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    //加這一步的目的是在Post請求的時候會先進認證,然后在到請求
    if (authenticationToken.getPrincipal() == null) {
      return null;
    }
    //獲取用戶信息
    String name = authenticationToken.getPrincipal().toString(); 
    SystemAdmin admin = adminService.selectOne(new EntityWrapper<SystemAdmin>().eq("username",name));

    if (admin == null) {
      return null;
    } else {
      //這里驗證authenticationToken和simpleAuthenticationInfo的信息
      SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(name, admin.getPassword().toString(), getName());
      return simpleAuthenticationInfo;
    }
  }
}

3、創建ShiroConfiguration.java文件

package com.becl.config;

import com.becl.shiro.PasswordMatcher;
import com.becl.shiro.ShiroRealm;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class ShiroConfiguration {



  //將自己的驗證方式加入容器
  @Bean
  public ShiroRealm myShiroRealm() {
    ShiroRealm myShiroRealm = new ShiroRealm();
    myShiroRealm.setCredentialsMatcher(passwordMatcher());//裝配自定義的密碼驗證方式
    return myShiroRealm;
  }

  // 配置加密方式
  // 配置了一下,這貨就是驗證不過,,改成手動驗證算了,以后換加密方式也方便
  @Bean
  public PasswordMatcher passwordMatcher() {
    return new PasswordMatcher();
  }

  //權限管理,配置主要是Realm的管理認證
  @Bean
  public SecurityManager securityManager() {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    securityManager.setRealm(myShiroRealm());
    return securityManager;
  }

  //Filter工廠,設置對應的過濾條件和跳轉條件
  @Bean
  public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    Map<String,String> map = new HashMap<String, String>();
    //登出
    map.put("/logout","logout");
    //不需要認證
    map.put("/logout","anon");
    map.put("/login*","anon");
    map.put("/shiroError","anon");
    //對所有用戶認證
    map.put("/**","authc");
    //map.put("/**","anon");
    //登錄
    shiroFilterFactoryBean.setLoginUrl("/login");
    //首頁
    shiroFilterFactoryBean.setSuccessUrl("/index");
    //錯誤頁面,認證不通過跳轉
    shiroFilterFactoryBean.setUnauthorizedUrl("/shiroError");
    shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
    return shiroFilterFactoryBean;
  }

  //加入注解的使用,不加入這個注解不生效
  @Bean
  public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
  }

}

4、自定義Shiro的密碼比較器

package com.becl.shiro;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.mindrot.jbcrypt.BCrypt;

/**
 * 自定義密碼比較器
 */
public class PasswordMatcher extends SimpleCredentialsMatcher {

  @Override
  public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
    UsernamePasswordToken utoken=(UsernamePasswordToken) token;

    //獲得用戶輸入的密碼:(可以采用加鹽(salt)的方式去檢驗)
    String inPassword = new String(utoken.getPassword());
    String username = utoken.getUsername();

    //獲得數據庫中的密碼
    String dbPassword = (String) info.getCredentials();
    //進行密碼的比對
    boolean flag = BCrypt.checkpw(inPassword,dbPassword);
    return flag;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

双柏县| 吴旗县| 桐庐县| 鄯善县| 延安市| 东丽区| 贺州市| 建宁县| 永胜县| 宿松县| 新田县| 吐鲁番市| 天长市| 丹寨县| 潞西市| 民乐县| 泰来县| 鞍山市| 瓦房店市| 彭泽县| 洪泽县| 广昌县| 新兴县| 广饶县| 阿拉善右旗| 普兰店市| 龙胜| 札达县| 砀山县| 克拉玛依市| 德令哈市| 类乌齐县| 江西省| 玛多县| 白城市| 昌黎县| 花垣县| 澎湖县| 富裕县| 老河口市| 泊头市|