springboot+shrio简易登录登出和用户权限认证。

摘要:
登录时,不要选中*ssl:表示安全的URL请求。当有多个参数时写入perms[“user”,当有多参数时写入roles[“admin”。当有多多参数时,每个参数必须在传递*rest[用户]之前传递:delete和其他*端口[8081]:它继承AuthorizingRealm类并覆盖登录验证和权限验证。这使得拦截能够知道用户信息。在登录方法中。
源码:https://github.com/huangshengz/myJavaDemo
本例子参考:https://www.cnblogs.com/HowieYuan/p/9259638.html

本例子验证主要有两个类,一个是自定义的拦截类ShiroConfig,在这里我们自定义了很多需要的操作。
例如:角色权限路径,登录路径等,一些具体的含义如下:
* anon:无参,开放权限,可以理解为匿名用户或游客
* logout:无参,注销,执行后会直接跳转到shiroFilterFactoryBean.setLoginUrl(); 设置的 url
* authc:无参,需要认证
* authcBasic:无参,表示 httpBasic 认证
* user:无参,表示必须存在用户,当登入操作时不做检查
* ssl:无参,表示安全的URL请求,协议为 https
* perms[user]:参数可写多个,表示需要某个或某些权限才能通过,多个参数时写 perms["user, admin"],当有多个参数时必须每个参数都通过才算通过
* roles[admin]:参数可写多个,表示是某个或某些角色才能通过,多个参数时写 roles["admin,user"],当有多个参数时必须每个参数都通过才算通过
* rest[user]:根据请求的方法,相当于 perms[user:method],其中 method 为 post,get,delete 等
* port[8081]:当请求的URL端口不是8081时,跳转到schemal://serverName:8081?queryString 其中 schmal 是协议 http 或 https 等等,
* serverName 是你访问的 Host,8081 是 Port 端口,queryString 是你访问的 URL 里的 ? 后面的参数

第二个类是CustomRealm。它继承了AuthorizingRealm类并且重写了登录验证和权限验证。在里面我们可以自定义我们的业务逻辑。这个类非常重要,
因为在拦截类ShiroConfig里,securityManager.setRealm(),就是把这个类注入进去,使得拦截能知道用户信息。
这个类doGetAuthenticationInfo 和 doGetAuthorizationInfo一定要区分明白,第一个是身份认证,例如登录时就是它,而第二个是角色权限认证,
在里面我们设置了角色权限。

在登录方法里,很明确的把用户信息放入到了UsernamePasswordToken里,而doGetAuthenticationInfo进行身份认证时,用户信息就从UsernamePasswordToken取。

最后说一下整个流程:
1. 项目启动时,Shiro拦截器工厂类ShiroConfig已经成功的注入。
2. 然后我们登录的时候,跳转到login方法里,数据会保存到UsernamePasswordToken里面,主要是用户名和用户密码。
3. 然后就走到了CustomRealm类了的身份证方法doGetAuthenticationInfo,在这里,我们根据用户名从数据库里拿到了用户密码
与登录密码做比较,然后判断密码是否正确,然后放行,到此用户登录成功。
4. 然后用户访问数据的时候,会调用CustomRealm的doGetAuthorizationInfo进行权限认证。

免责声明:文章转载自《springboot+shrio简易登录登出和用户权限认证。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OC面向对象—继承devexpress实现单元格合并以及依据条件合并单元格下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第八周课程总结&实验报告

实验目的 理解异常的基本概念; 掌握异常处理方法及熟悉常见异常的捕获方法。 实验要求 练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。 掌握自定义异常类的方法。 实验内容 编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在ca...

目录的文件查看和修改

在Linux系统中文件的权限可以在文件上单击右键—>属性来查看。   但是我们这次用的是全命令来查看和修改文件的权限   为了举一个实例,我们在mnt文件夹中建立一个fileA文件,然后在fileA文件夹中建立一个zhaoyuqiang.html网页。   建好之,我们就以fileA文件和zhaoyuqiang.html文件来说事,呵呵 查看文件的...

CentOS7下使用YUM安装mariadb10

1:由于centos7 默认使用yum安装MySQL的话就会安装mariadb,只是安装的版本停留在mariadb5.x,版本比较低。如果我们需要安装mariadb10这里就需要删除mariadb-libs-5.5.52-1.el7.x86_64,这是系统默认安装的。 rpm -qa mariadb-libs yum remove mariadb-libs...

MethodImplOptions.Synchronized的一点讨论

Review代码发现有一个方法加了[MethodImpl(MethodImplOptions.Synchronized)] 属性,这个属性的目的,从名字上就可以看出,是要对所有线程进行同步执行。 对方法加上这个属性之后,会把整个方法体加在一个同步块中,比如下面的代码: [MethodImpl(MethodImplOptions.Synchronized)]...

新版CRMEB PRO与CRMEB 3.X版功能及框架对比

感谢各位用户的支持和信任,CRMEB在大家的见证下,一步步成长,取得了一点小成绩,但依然不敢松懈,心之所向,素履以往,生如逆旅, 一苇以航。在新冠疫情影响下,传统企业都在缩减开支,裁员降薪,每个人都对未来的不确定性比较迷茫,阴霾未散,灾荒年里捂紧口袋,准备过冬。众邦科技知难而上,3月份复工以来,紧锣密鼓加快招聘进度,目前新加入同事13人,在研发,客服,运营...

Java对象为空时,将null转换为"" 保存值为空的属性

Java对象为空时,不显示该对象属性,或者将null转换为""第一种方法:@JsonInclude(JsonInclude.Include.NON_NULL)private String resourceName; Include.ALWAYS 属性都序列化 Include.NON_DEFAULT 属性为默认值不序列化 Include.NON_EMPTY...