所以也没有正确的鉴权,导致每次验证都出错。。。
请问NutDaoRealm是在哪儿初始化,哪儿调用的呢?
Shiro.ini里是正确配置了的。
初始化什么?数据?还是表结构?
自豪地采用 NutzCN ionic
@wendal 就是doGetAuthenticationInfo和doGetAuthorizationInfo方法都从未调用过!!
贴shiro.ini
自豪地采用 NutzCN ionic
能调用到需要几个条件。 注册了合适的Token类型,对应的Token类型的Filter配置对urls,然后登录的时候用POST
自豪地采用 NutzCN ionic
说一下Shiro的基本调用过程(我的理解, ^_^)
核心配置:
[main]
nutzdao_realm = net.wendal.nutzbook.shiro.realm.NutDaoRealm
authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter
authc.loginUrl = /user/login
logout.redirectUrl= /user/login
[urls]
/user/logout = logout
/user/** = authc
首先, 登陆必须是特定URL(这里是/user/login),且必须POST请求,这是AuthenticationFilter里判断是否为登陆请求的默认方式
过程如下:
1. 首先, 浏览器发起一个POST请求到/user/login
2. web.xml里面的ShiroFilter拦截到这个请求
3. Shiro根据[urls]和[main]里面的配置,知道这个请求要交给CaptchaFormAuthenticationFilter处理
4. CaptchaFormAuthenticationFilter判断该请求是POST,所以,调用executeLogin
5. executeLogin中判断各种小条件,然后生成CaptchaUsernamePasswordToken
6. 而这个CaptchaUsernamePasswordToken正是nutzdao_realm对于的net.wendal.nutzbook.shiro.realm.NutDaoRealm实例的构造方法中声明的类型, 这里说一下, shiro会把shiro.ini里面的realm实例存为List, 在配置文件中是不能直接看出Realm和Token类型的关系的
7. 然后shiro就调用NutDaoRealm的doGetAuthenticationInfo获取登陆信息了,然后判断hash后的密码进行判断登陆
8. 完成后再回到CaptchaFormAuthenticationFilter, 执行onSucess或者onFail之类的操作,完成登陆
@wendal 谢谢老大的详细介绍。我有空一定详细看看,现在我的项目第七步是没有走的,所以应该是之前某一步出了问题。
@wendal
您好,我是模仿这nutzbook写的,您说的是这个么:
另外,是不是因为没有调用这个,所以即使后台的用户名密码验证成功了,也**没有办法跳转到成功之后的页面**呢。
因为我对shiro的原理不是很清楚,还望见谅,谢谢啦
@backbp 你遇到的问题已经在另外一个帖子里面说了 关于shiro登录无法跳转登录成功之后的页面