1 Star 0 Fork 0

郑鳕 / shiro-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

shiro-demo

介绍

  • shiro-java-helloworld(普通java项目)
  • shiro-javaweb-spring(javaweb项目,SpringMVC整合Shiro)

这两个项目均为Shiro的示例项目,其中javaweb项目中实现了Shiro的单点登录,即同一个用户多设备登录限制,后者登录的用户踢出前者登录的用户。

主要内容

  1. 获取当前的Subject,调用SecurityUtils.getSubject();得到当前用户
  2. 测试当前的用户是否已经被认证,即是否已经登录。调用Subject的isAuthenticated()
  3. 若没有被认证,则把用户名和密码封装为UsernamePasswordToken对象
  • 1).创建一个表单页面
  • 2).把请求提交到SpringMVC的Handler
  • 3).获取用户名和密码
  1. 执行登录:调用Subjectlogin(AuthenticationToken)方法。
  2. 自定义Realm的方法,从数据库中获取对应的记录,返回给Shiro
  • 1).实际上需要继承org.apache.shiro.realm.AuthenticatingRealm
  • 2).实现doGetAuthenticationInfo(AuthenticationToken)方法
  1. shiro完成对密码的比对。
  • 1).通过AuthenticatingRealmcredentialsMatcher属性来进行密码的比对
  • 2).如何把一个字符串加密为MD5
  • 3).替换当前RealmcredentialsMatcher属性。直接使用HashedCredentialsMatcher对象,并设置加密算法即可。
  1. 为什么使用MD5盐值加密 --(因为我们希望即便两个人的密码一样的情况下,用MD5加密后的值是不一样的,这样可以更安全些)
  2. 如何做到:
  • 1).在doGetAuthenticationInfo方法返回值创建SimpleAuthenticationInfo对象的时候, 需要使用new SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName);构造器
  • 2).使用ByteSource.Util.bytes()来计算盐值
  • 3).盐值需要唯一,一般使用随机字符串或user id
  • 4).使用new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations);来计算盐值加密后的密码的值
  1. 授权
  • 1).需要继承AuthorizingRealm类,并实现其doGetAuthorizationInfo方法
  • 2).AuthorizingRealm类继承自AuthenticatingRealm, 但没有实现AuthenticatingRealm中的doGetAuthenticationInfo方法, 所以认证和授权只需要继承AuthorizingRealm就可以了,同时实现他的两个抽象方法。
  1. 权限注解:
  • 1).@RequiresAuthentication : 已经认证(即登录)
  • 2).@RequiresUser : 已经认证(即登录)或者通过记住我登录的
  • 3).@RequiresGuest : 没有认证(登录)或者通过记住我登录的,即是游客身份
  • 4).@RequiresRoles(value={"admin", "user"}, logical=Logical.AND) : 表示需要角色admin和user
  • 5).@RequiresPermissions(value={"user:add", "user:edit"}, logical=Logical.OR) : 表示需要权限user:add 或 user:edit

空文件

简介

shiro-java-helloworld(普通java项目)、shiro-javaweb-spring(javaweb项目,SpringMVC整合Shiro)。这两个项目均为Shiro的示例项目,其中javaweb项目中实现了Shiro的单点登录,即同一个用户多设备登录限制,后者登录的用户踢出前者登录的用户。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/zhengxue/shiro-demo.git
git@gitee.com:zhengxue/shiro-demo.git
zhengxue
shiro-demo
shiro-demo
master

搜索帮助