欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot整合shiro安全框架過(guò)程解析

 更新時(shí)間:2019年11月28日 15:03:19   作者:程序猿修煉之道  
這篇文章主要介紹了spring boot整合shiro安全框架過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

題記:在學(xué)習(xí)了springboot和thymeleaf之后,想完成一個(gè)項(xiàng)目練練手,于是使用springboot+mybatis和thymeleaf完成一個(gè)博客系統(tǒng),在完成的過(guò)程中出現(xiàn)的一些問(wèn)題,將這些問(wèn)題記錄下來(lái),作為自己的學(xué)習(xí)心得。在這先感謝群主TyCoding的Tumo項(xiàng)目,雖然本人實(shí)在太菜了,好些地方看不懂,但還是使我受益匪淺。

shiro作為一個(gè)小巧靈活的安全框架,在認(rèn)證和授權(quán)方面簡(jiǎn)約但又不簡(jiǎn)單,十分容易上手使用。下面是整合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控制臺(tái)中添加基礎(chǔ)包的掃描和實(shí)體類的掃描注解

由于本人實(shí)在粗心,用try,catch將這個(gè)錯(cuò)誤包起來(lái)了,所以找了一個(gè)下午的bug才發(fā)現(xiàn)。如果是用ssm整合shiro也大致一樣,只不過(guò)需要在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域

個(gè)人覺(jué)得realm就相當(dāng)于一個(gè)數(shù)據(jù)源 ,shiro從realm中去獲取一些數(shù)據(jù),驗(yàn)證用戶的認(rèn)證和授權(quán)。

3.1 usermapper接口

@Mapper
public interface UserMapper {

  /**
   * 根據(jù)Name查詢用戶數(shù)據(jù)
   */
  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

這里只貼出認(rèn)證的方法。

@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.根據(jù)用戶名查詢數(shù)據(jù)庫(kù)
    SysUser user = userMapper.findByName(username);
    //3.判斷用戶是否存在或者密碼是否一致
    if(user != null && user.getPassword().equals(password)) {
      //4.如果一致返回安全數(shù)據(jù)
      //構(gòu)造方法:安全數(shù)據(jù),密碼,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) {
    //使用默認(rèn)的安全管理器
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm);
    //將自定義的realm交給安全管理器統(tǒng)一調(diào)度管理
    securityManager.setRealm(realm);
    return securityManager;
  }

4.2 配置過(guò)濾器工廠

@Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
    //1.創(chuàng)建過(guò)濾器工廠
    ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean();
    //2.設(shè)置安全管理器
    filterFactory.setSecurityManager(securityManager);
    //3.通用配置(跳轉(zhuǎn)登錄頁(yè)面,為授權(quán)跳轉(zhuǎn)的頁(yè)面)
    filterFactory.setLoginUrl("#");//跳轉(zhuǎn)url地址
    filterFactory.setUnauthorizedUrl("#");//未授權(quán)的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 "用戶名或密碼錯(cuò)誤";
    }
  }

6.登陸

6.1 獲取md5加密的密碼

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

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

可以看到使用加密過(guò)的密碼是可以登陸成功的,但使用原始密碼是無(wú)法登陸成功的,可以在具體的業(yè)務(wù)邏輯層中添加用戶時(shí)將密碼進(jìn)行加密處理。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java常見(jiàn)異常及處理方式總結(jié)

    Java常見(jiàn)異常及處理方式總結(jié)

    今天給大家?guī)?lái)的是Java的相關(guān)知識(shí),文章圍繞著Java異常展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 教你如何正確了解java三大特性!!!!

    教你如何正確了解java三大特性!!!!

    所有的面向?qū)ο缶幊陶Z(yǔ)言的思路都是差不多的,而這三大特性,則是思路中的支柱點(diǎn),接下來(lái)我就重點(diǎn)講解了一下java三大特性,感興趣的朋友跟隨腳本之家小編一起看看吧
    2021-07-07
  • JDK19新特性使用實(shí)例詳解

    JDK19新特性使用實(shí)例詳解

    這篇文章主要為大家介紹了JDK19新特性使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 解決SpringBoot的@DeleteMapping注解的方法不被調(diào)用問(wèn)題

    解決SpringBoot的@DeleteMapping注解的方法不被調(diào)用問(wèn)題

    這篇文章主要介紹了解決SpringBoot的@DeleteMapping注解的方法不被調(diào)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java中如何判斷是否為閏年詳細(xì)實(shí)例

    Java中如何判斷是否為閏年詳細(xì)實(shí)例

    所謂閏年就是指2月有29天的那一年,下面這篇文章主要給大家介紹了關(guān)于Java中如何判斷是否為閏年的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • spring boot入門開(kāi)始你的第一個(gè)應(yīng)用

    spring boot入門開(kāi)始你的第一個(gè)應(yīng)用

    這篇文章主要介紹了spring boot入門開(kāi)始你的第一個(gè)應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • spring事務(wù)之事務(wù)掛起和事務(wù)恢復(fù)源碼解讀

    spring事務(wù)之事務(wù)掛起和事務(wù)恢復(fù)源碼解讀

    這篇文章主要介紹了spring事務(wù)之事務(wù)掛起和事務(wù)恢復(fù)源碼解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java的反射機(jī)制一起來(lái)看看

    Java的反射機(jī)制一起來(lái)看看

    這篇文章主要為大家詳細(xì)介紹了Java反射機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • SpringMvc中容器加載的過(guò)程源碼詳解

    SpringMvc中容器加載的過(guò)程源碼詳解

    這篇文章主要介紹了SpringMvc中容器加載的過(guò)程源碼詳解,springmvc是基于spring的一個(gè)web層框架,同樣也是web層框架的有struts,struts2等等,但是struts因?yàn)槁┒吹葐?wèn)題,被慢慢淘汰了,現(xiàn)在基本都在用springmvc,需要的朋友可以參考下
    2023-11-11
  • 一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟

    一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程,下面這篇文章主要給大家介紹了一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評(píng)論