说一下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之类的操作,完成登陆