最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼

 更新時(shí)間:2021年02月26日 10:51:00   作者:風(fēng)青宇  
這篇文章主要介紹了SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

導(dǎo)入依賴(pom.xml)

 <!--整合Shiro安全框架-->
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-spring</artifactId>
      <version>1.4.0</version>
    </dependency>
    <!--集成jwt實(shí)現(xiàn)token認(rèn)證-->
    <dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>3.2.0</version>
    </dependency>

創(chuàng)建 ShiroConfig 配置類

@Configuration
public class ShiroConfig {

  /**
   * ShiroFilterFactoryBean
   */
  @Bean
  public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
    ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
    //設(shè)置安全管理器
    factoryBean.setSecurityManager(defaultWebSecurityManager);
    // 添加shiro的內(nèi)置過(guò)濾器
    /*
     * anon:無(wú)需認(rèn)證就可以訪問(wèn)
     * authc:必須認(rèn)證才能訪問(wèn)
     * user:必須擁有 記住我 功能才能用
     * perms:擁有對(duì)某個(gè)資源的權(quán)限能訪問(wèn)
     * role:擁有某個(gè)角色權(quán)限能訪問(wèn)
     */
    Map<String, String> filterMap = new LinkedHashMap<>();
    // 放行不需要權(quán)限認(rèn)證的接口
    //放行登錄接口
    filterMap.put("/login/**", "anon");
    //放行用戶接口
    filterMap.put("/", "anon");       // 網(wǎng)站首頁(yè)
 
    //認(rèn)證管理員接口
    filterMap.put("/administrators/**", "authc");
    factoryBean.setFilterChainDefinitionMap(filterMap);
    // 設(shè)置無(wú)權(quán)限時(shí)跳轉(zhuǎn)的 url
    // 設(shè)置登錄的請(qǐng)求
    factoryBean.setLoginUrl("/login/toLogin");

    return factoryBean;
  }

  /**
   * 注入 DefaultWebSecurityManager
   */
  @Bean(name = "securityManager")
  public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("customRealm") CustomRealm customRealm) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //關(guān)聯(lián)CustomRealm
    securityManager.setRealm(customRealm);
    return securityManager;
  }

  /**
   * 注入 securityManager
   */
  @Bean
  public CustomRealm customRealm() {
    return new CustomRealm();
  }

}

創(chuàng)建密碼登錄時(shí)驗(yàn)證授權(quán) CustomRealm 類

@Component
public class CustomRealm extends AuthorizingRealm {

  @Autowired
  AdministratorsService administratorsService;

  /*
   * 設(shè)置加密方式
   */
  {
    HashedCredentialsMatcher mather = new HashedCredentialsMatcher();
    // 加密方式
    mather.setHashAlgorithmName("md5");
    // 密碼進(jìn)行一次運(yùn)算
    mather.setHashIterations(512);
    this.setCredentialsMatcher(mather);
  }

  /**
   * 授權(quán)
   */
  @Override
  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    System.out.println("————授權(quán)————doGetAuthorizationInfo————");

    return null;
  }

  /**
   * 認(rèn)證
   */
  @Override
  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    System.out.println("————認(rèn)證————doGetAuthenticationInfo————");

    UsernamePasswordToken userToken = (UsernamePasswordToken) token;
    // 連接數(shù)據(jù)庫(kù) 查詢用戶數(shù)據(jù)
    QueryWrapper<Administrators> wrapper = new QueryWrapper<>();
    wrapper.eq("username", userToken.getUsername());
    Administrators administrators = administratorsService.getOne(wrapper);

    if (administrators == null) {
      return null; // 拋出異常 UnknownAccountException
    }
    // 密碼認(rèn)證,shiro做
    return new SimpleAuthenticationInfo("", administrators.getPassword(), "");
  }

}

控制層用戶密碼登錄

//用戶名登錄
  @ApiOperation(value = "管理員登錄", notes = "用戶名登錄--不進(jìn)行攔截")
  @PostMapping("/doLogin")
  public String doLogin(@RequestParam("username") String username,
             @RequestParam("password") String password,
             HttpSession session,Model model) {
    // 獲取當(dāng)前的用戶
    Subject subject = SecurityUtils.getSubject();
    // 封裝用戶的登錄數(shù)據(jù)
    UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    try {
      subject.login(token);
      //保存session會(huì)話 管理員名字
      session.setAttribute("adname", username);
      return "admin";
    } catch (UnknownAccountException e) {
      model.addAttribute("usererror", "用戶名錯(cuò)誤!請(qǐng)重新輸入。");
      return "login";
    } catch (IncorrectCredentialsException ice) {
      model.addAttribute("pwerror", "密碼錯(cuò)誤!請(qǐng)重新輸入。");
      return "login";
    }
  }

到此這篇關(guān)于SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SpringBoot 整合 Shiro 密碼登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

平远县| 延长县| 宝清县| 灵丘县| 青州市| 崇义县| 丰县| 介休市| 禄劝| 平凉市| 镇巴县| 曲水县| 微博| 游戏| 凯里市| 茶陵县| 浙江省| 兴城市| 彰化市| 固原市| 湘潭县| 淮北市| 桃园市| 岳阳市| 保定市| 柯坪县| 北海市| 正镶白旗| 桑植县| 鸡西市| 罗甸县| 灵璧县| 新龙县| 浮山县| 霞浦县| 北川| 鄂州市| 延长县| 玉田县| 肇源县| 天长市|