亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

spring boot整合shiro安全框架過程解析

發布時間:2020-10-07 09:28:38 來源:腳本之家 閱讀:187 作者:程序猿修煉之道 欄目:編程語言

這篇文章主要介紹了spring boot整合shiro安全框架過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

題記:在學習了springboot和thymeleaf之后,想完成一個項目練練手,于是使用springboot+mybatis和thymeleaf完成一個博客系統,在完成的過程中出現的一些問題,將這些問題記錄下來,作為自己的學習心得。在這先感謝群主TyCoding的Tumo項目,雖然本人實在太菜了,好些地方看不懂,但還是使我受益匪淺。

shiro作為一個小巧靈活的安全框架,在認證和授權方面簡約但又不簡單,十分容易上手使用。下面是整合shiro的具體流程。

1.添加依賴

<!--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>

2.在springboot控制臺中添加基礎包的掃描和實體類的掃描注解

由于本人實在粗心,用try,catch將這個錯誤包起來了,所以找了一個下午的bug才發現。如果是用ssm整合shiro也大致一樣,只不過需要在web.xml中添加一些配置信息。

具體流程大同小異。

@SpringBootApplication(scanBasePackages = "cn.zhq")
@EntityScan("cn.zhq.system.entity")
public class MyBlogApplication {
  public static void main(String[] args) {
    SpringApplication.run(MyBlogApplication.class);
  }
}

3.自定義realm域

個人覺得realm就相當于一個數據源 ,shiro從realm中去獲取一些數據,驗證用戶的認證和授權。

3.1 usermapper接口

@Mapper
public interface UserMapper {

  /**
   * 根據Name查詢用戶數據
   */
  SysUser findByName(String username);
}

3.2 配置文件usermapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.zhq.system.mapper.UserMapper">
  <select id="findByName" resultType="sysuser" parameterType="String">
   select * from tb_user where username = #{username}
  </select>
</mapper>

3.3 編寫自定義realm并繼承AuthorizingRealm

這里只貼出認證的方法。

@Autowired
  private UserMapper userMapper;

  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    //1.獲取登錄的用戶名密碼(token)
    UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;
    String username = upToken.getUsername();
    String password = new String( upToken.getPassword());
    //2.根據用戶名查詢數據庫
    SysUser user = userMapper.findByName(username);
    //3.判斷用戶是否存在或者密碼是否一致
    if(user != null && user.getPassword().equals(password)) {
      //4.如果一致返回安全數據
      //構造方法:安全數據,密碼,realm域名
      SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());
      return info;
    }
    //5.不一致,返回null(拋出異常)
    return null;
  }

4.編寫shiro配置類

4.1 安全管理器

//配置自定義的Realm
  @Bean
  public AuthRealm getRealm() {
    return new AuthRealm();
  }

  //配置安全管理器
  @Bean
  public SecurityManager securityManager(AuthRealm realm) {
    //使用默認的安全管理器
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm);
    //將自定義的realm交給安全管理器統一調度管理
    securityManager.setRealm(realm);
    return securityManager;
  }

4.2 配置過濾器工廠

@Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
    //1.創建過濾器工廠
    ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean();
    //2.設置安全管理器
    filterFactory.setSecurityManager(securityManager);
    //3.通用配置(跳轉登錄頁面,為授權跳轉的頁面)
    filterFactory.setLoginUrl("#");//跳轉url地址
    filterFactory.setUnauthorizedUrl("#");//未授權的url
    return filterFactory;
  }

5. 編寫controller方法

@RequestMapping(value="/login")
  @ResponseBody
  public String login(String username,String password) {
    try{
      Subject subject = SecurityUtils.getSubject();
      UsernamePasswordToken uptoken = new UsernamePasswordToken(username,password);
      subject.login(uptoken);
      return "登錄成功";
    }catch (Exception e) {
      return "用戶名或密碼錯誤";
    }
  }

6.登陸

6.1 獲取md5加密的密碼

由于密碼是使用shiro提供的Md5加密方式。為了避免麻煩就直接打印加密之后的密碼。

Md5Hash的參數代表的含義分別是 加密的內容 | 鹽(加密的混淆字符串) | 加密次數
System.out.println(new Md5Hash("123456","zhangbo",3).toString());

spring boot整合shiro安全框架過程解析

spring boot整合shiro安全框架過程解析

可以看到使用加密過的密碼是可以登陸成功的,但使用原始密碼是無法登陸成功的,可以在具體的業務邏輯層中添加用戶時將密碼進行加密處理。

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

向AI問一下細節

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

AI

山阳县| 靖江市| 准格尔旗| 西林县| 阳江市| 永康市| 集安市| 阜新市| 渭南市| 雷州市| 邳州市| 玉溪市| 通化县| 新蔡县| 大姚县| 长岭县| 峨边| 宜兴市| 达孜县| 肃宁县| 闽侯县| 田东县| 兴山县| 岑溪市| 临沂市| 罗平县| 苍溪县| 衡阳市| 平武县| 长兴县| 抚松县| 长宁区| 辽阳县| 高清| 福贡县| 桦川县| 榆中县| 光山县| 平湖市| 金川县| 敦化市|