博客
关于我
Shiro 的身份认证
阅读量:697 次
发布时间:2019-03-21

本文共 1281 字,大约阅读时间需要 4 分钟。

身份验证与Shiro框овор

身份验证是指用户提供身份信息(如用户名)和凭证(如密码)给Shiro框架进行认证,确认其与应用预期一致。以下是相关知识与操作步骤。

基本概念

  • Principals(身份)

    通常是登录时提交的用户名,表示用户的身份信息。例如,登录时输入的用户名属于Principals。

  • Credentials(凭证)

    通常是Subject自己知道的密码。例如,登录时输入的密码属于Credentials。

  • UsernamePasswordToken

    用于支持基于用户名和密码的身份验证。如果需要记住用户的身份,可以通过将token设为记住的方式实现。不过需要注意的是,Shiro的记住功能不会记住凭证,也就不会自动登录。

身份验证步骤

  • 收集Subject提交的Principals和Credentials,生成token。

    UsernamePasswordToken token = new UsernamePasswordToken(username, password);token.setRememberMe(true);
  • 提交Principals和Credentials进行身份验证。

    Subject currentUser = SecurityUtils.getSubject();currentUser.login(token);
  • 处理认证结果。

    try {    currentUser.login(token);} catch (AuthenticationException e) {    // 用户名或密码错误    e.printStackTrace();} catch (IncorrectCredentialsException e) {    // 密码错误} catch (LockedAccountException e) {    // 账户锁定}
  • 注销操作

    调用currentUser.logout()后,Subject会变成匿名状态,之前的会话将失效。对于基于Cookies的Web应用,这会清除记忆的用户状态。

    Remembered(记住我)

    • 记住的Subject不是匿名的,是有一个已知的Principal的。

    • Remembered的判断

      subject.isRemembered() → true
    • 注意事项

      Shiro的记住功能仅记住Principals,不会记忆凭证,也不会自动登录。

    Authenticated(已认证)

    • 已认证Subject是指在当前会话中,通过Principals和Credentials成功认证的Subject。

      subject.isAuthenticated() → true
    • 重要性

      isRemembered()isAuthenticated()是互斥的。如果已被记住,则不会已经认证。

    这篇文章主要介绍了Shiro框架中的基于用户名密码的身份验证流程,简单明了地解释了每一步的含义与操作方法。如果需要更深入的学习,可以进一步探讨不同的认证策略或集成第三方身份验证器。

    转载地址:http://oskrz.baihongyu.com/

    你可能感兴趣的文章
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>
    00013.05 字符串比较
    查看>>
    Effective Java 读书笔记
    查看>>
    SpringBoot使用@Email报错误
    查看>>
    Rabbitmq的内存磁盘监控
    查看>>
    访问servlet时弹出文件下载框解决方法
    查看>>
    IDEA-@Slf4j和log标签&@Data(Lombok)无效
    查看>>
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    Thymeleaf 生成下标,索引,使用Stat变量
    查看>>
    初始微服务---Springcloud发展【第一期】
    查看>>
    RAFT 拜占庭将军 共识算法
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>
    cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
    查看>>
    【Jquery】获取当前窗口的宽度值/高度值
    查看>>
    Android 架构组件 – 让天下没有难做的 App
    查看>>
    能解决数据可视化大屏需求的3款可视化工具
    查看>>
    Shell脚本防DNS攻击检测并删除肉机IP
    查看>>
    如何在VSCode中定制JSON的IntelliSense
    查看>>
    椭圆曲线的定义
    查看>>
    多代理区块链框架客户端的操作
    查看>>