NutzCN Logo
问答 关于Shiro登录无法跳转登陆成功之后的页面
发布于 3308天前 作者 backbp 6393 次浏览 复制 上一个帖子 下一个帖子
标签: shiro

我的shiro.ini如下: QQ截图20151101111750_jpg
我说一下我理解的过程,启动系统之后我输URL:http://210.76.194.133:8080/IIEWXCJ/userlogin/showIndex ,然后shiro根据
/userlogin/* = authc 这一句 自动跳转到了/userlogin/loginpage,也就是:
QQ截图20151101112247_jpg
然后显示了登录页面,我输入用户名密码之后进行登录:
QQ截图20151101112438_jpg
日志打印来看,这一步确实验证通过了,返回的是1,然后界面:
QQ截图20151101112626_jpg
我想他跳转到userlogin/showIndex ,然后发现怎么都跳不过去,打印的日志来看,又会回到/userlogin/loginpage

上面就是我的问题,另外,我的NutDaoRealm里面的doGetAuthorizationInfo和doGetAuthenticationInfo也都没有被调用过。不知道是什么原因。

请求大家的解答,新手学习,多谢多谢。

4 回复

你的意思是通过入口方法做登陆, 而非通过AuthenticationFilter拦截登陆?

那你应该去调用

Subject subject = SecurityUtils.getSubject();
subject.login(new XXXToken(............));

只有调用了subject.login, shiro才会把当前session设置为已登陆状态,而不是简单为session里面放个值就可以的.

另外, authc.loginUrl有两个含义

  1. GET请求的时候, 穿过, 显示页面(反正就是继续下一个Filter)
  2. POST请求的时候, 是登陆请求, 才会走CaptchaFormAuthenticationFilter里面生成Token的方法

再说N次, 代码不要截图!!!!

@wendal
非常感谢您的指导,通过您说的方法

Subject subject = SecurityUtils.getSubject();
subject.login(new XXXToken(............));

解决了登陆的问题,另外之所以没有调用我写的doGetAuthenticationInfo,是因为我用了带验证码的Token却没写验证码,换一个Token就好了。
虽然问题解决了,但是还是有一些不清楚的地方,如果方便,想请您帮忙讲解下:
1、您在帖子
我模仿NutzBook发现我的项目NutDaoRealm从未调用过中说,doGetAuthenticationInfo 获取登录信息,这个是指已经登录的用户信息吗?
2、subject.login(new XXXToken(............)); 这个方法是只负责记录登录用户的相关信息,但是并不进行用户名密码正确与否的判断吧?

谢谢您的帮助

  1. 执行doGetAuthenticationInfo的时候还没完成登陆,只是把AuthenticationToken转换为AuthenticationInfo
  2. subject.login是否检查用户名/密码, 取决于处理该类型Token的Realm实现类的逻辑, NutDaoRealm属于有校验. 本网站源码里面有个CrossScreenRealm, 它就是跳过校验的(assertCredentialsMatch方法永不抛异常).
添加回复
请先登陆
回到顶部