编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

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

wxchong 2024-08-02 08:56:34 开源技术 32 ℃ 0 评论

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中的权限认证,这块内容也是重点。下期见, 关注我,不迷路~ 加群一起交流

往期内容

  • 我的博客(阅读体验较佳)
  • Springboot入门
  • Springboot基础(一)
  • Springboot基础(二)
  • Springboot基础(三)
  • Springboot基础(四)
  • Springboot基础(五)
  • SpringBoot进阶之缓存中间件Redis
  • SpringBoot进阶之MyBatis分页插件
  • SpringBoot进阶之跨域问题处理(CORS)
  • SpringBoot进阶之日志集成
  • SpringBoot进阶之请求拦截
  • SpringBoot进阶之事务管理及并发问题
  • SpringBoot进阶之整合Shiro鉴权框架(一)
  • SpringBoot进阶之整合Shiro鉴权框架(二)

项目源码(持续更新 欢迎star??)

  • springboot-all
  • 地址: https://github.com/qiuChengleiy/springboot-all.git

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表