SpringBoot进阶之整合Shiro鉴权框架(三)

简介: SpringBoot进阶之整合Shiro鉴权框架(三)

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶, 篇幅会较多~


适合人群

  • 学完Java基础
  • 想通过Java快速构建web应用程序
  • 想学习或了解SpringBoot
  • SpringBoot进阶学习

大佬可以绕过 ~


背景

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获~


情景回顾

上期带大家学习了Shiro的基本使用,实现了用户认证功能,本期将带大家学习Shiro中如何存储cookie。同样的,我们集成到Springboot中。


功能实现

上期我们遗留了一个小问题,就是用户打开浏览器登录后,再关闭,然后又跳回了登录页。那么如何去解决这个问题❓其实很简单,让我们的服务器记住它不就好了,想让它失效,就给一个过期时间


ShiroConfig类中添加如下方法:

/**
     * cookie
     * @return
     */
    public SimpleCookie rememberMeCookie() {
        // 设置cookie名称
        SimpleCookie cookie = new SimpleCookie("rememberMe");
        // 过期时间,单位秒
        cookie.setMaxAge(86400);
        return cookie;
    }
    /**
     * cookie管理对象
     * @return
     */
    public CookieRememberMeManager rememberMeManager() {
        CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
        cookieRememberMeManager.setCookie(rememberMeCookie());
        // cookie加密的密钥
        cookieRememberMeManager.setCipherKey(Base64.decode("uwandaljILlia458ad4"));
        return cookieRememberMeManager;
    }
复制代码


修改 securityManager()方法

@Bean
public SecurityManager securityManager(){
    DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();
    securityManager.setRealm(shiroRealm());
    // 添加remberManager
    securityManager.setRememberMeManager(rememberMeManager());
    return securityManager;
}
复制代码


修改认证路径, user指的是用户认证通过或者配置了Remember Me记住用户登录状态后可访问

// filterChainDefinitionMap.put("/**", "authc");
filterChainDefinitionMap.put("/**", "user");
复制代码


最后修改我们的控制器,在登录调用的时候传入是否记住:

@PostMapping("/login")
@ResponseBody
public String login(String username, String password) {
    //UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    // 获取Subject对象
    UsernamePasswordToken token = new UsernamePasswordToken(username, password, true);
    Subject subject = SecurityUtils.getSubject();
    try {
        // 执行登录
        subject.login(token);
        return "ok";
    } catch (UnknownAccountException e) {
        return e.getMessage();
    } catch (IncorrectCredentialsException e) {
        return "IncorrectCredentialsException " + e.getMessage();
    } catch (LockedAccountException e) {
        return "LockedAccountException " + e.getMessage();
    } catch (AuthenticationException e) {
        return "认证失败!";
    }
}
复制代码

大家试着运行一下 ~


结束语

本期内容就到这里结束了,总结一下,本节主要讲了Shiro如何记住用户登录状态以及相关实现,大家可以自己多试试


下期预告

下期给大家讲讲Shiro中的权限认证,这块内容也是重点。下期见, 关注我,不迷路~ 加群一起交流

相关文章
|
1月前
|
缓存 安全 Java
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
|
1月前
|
安全 算法 Java
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
75 0
|
1月前
|
开发框架 安全 Java
【Java专题_01】springboot+Shiro+Jwt整合方案
【Java专题_01】springboot+Shiro+Jwt整合方案
75 0
|
1月前
|
Java 关系型数据库 MySQL
Shiro实战+springboot集成
Shiro实战+springboot集成
49 0
|
1月前
|
前端开发 Java 关系型数据库
【Shiro】Springboot集成Shiro
【Shiro】Springboot集成Shiro
60 1
|
1月前
|
Java
springboot如何配置使用shiro
【1月更文挑战第11天】springboot如何配置使用shiro
20 2
|
1月前
|
存储 Java 数据库
SpringBoot+JWT+Shiro
SpringBoot+JWT+Shiro
39 0
|
1月前
|
存储 JSON 安全
使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)
使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)
124 0
|
1月前
|
前端开发 Java Spring
使用Spring Boot集成Shiro时出现了无法注入Service的问题
使用Spring Boot集成Shiro时出现了无法注入Service的问题
|
1月前
|
Java
Springboot整合之Shiro和JWT技术实现无感刷新9
Springboot整合之Shiro和JWT技术实现无感刷新9