最近的生活,真是一言难尽。。。不多说了,直接进入正题吧。
以前做项目的时候,对于用户登录这边,基本用的就是拦截器,多身份得话,就在拦截器中进行判断。在浏览帖子的时候,看到了关于shiro的介绍,又正巧要做一个新的项目。于是在新的项目中,用户的权限管理就改用shiro去控制。
关于shiro,就不多介绍了,一个轻量的用户权限管理包;项目的要求也很简单。后台管理员和前台用户两个身份分别进行登录,访问各自的url。
首先,通过maven引入shiro的jar包
然后,创建spring-shiro.xml文件,对shiro进行配置,需要注意的几个配置点:
多身份用户,对应多个realm对象
不同身份下的身份验证规则(FormAuthenticationFilter类或者重写的继承类)
shiro的主filter配置(ShiroFilterFactoryBean),包括filters(过滤规则)、filterChainDefinitions(设置url对应的过滤规则)
配置文件如下:
在用户登录的时候,需要把用户的登录名、密码传入到UsernamePasswordToken类中,由于我们是两种身份不同的用户,所以需要对UsernamePasswordToken类进行拓展,增加loginType参数
这样在登录时候原本调用的UserPasswordToken可以改为新的自定义类,并增加LoginType参数
不同身份对应的用户信息验证,在自定义的realm类中,进行实现
至此,多身份的登录流程就写完了,但是,突然发现在同一个浏览器登录两个身份的时候,前一个SimpleAuthenticationInfo中的principal对象会报错,后一个把前一个替换掉了,再去访问前一个的话,就会出现对象类型错误。
研究了一阵子。。虽然说是解决了,但是不知道其他人是怎么弄的,网上找了好多,也没找到类型的问题(是我找的不对吗)。
下一篇文章,去说一下我的解决办法。