在使用shiro时都会自定义一个Realm,Realm的作用就是提供给shiro和数据库进行交互的一个中间层,这样shiro能够帮助我们处理登录(成功、失败),授权,访问控制等功能,但是用户登录的用户信息和用户具体的权限信息是shiro未知的,所以需要每次都请求Realm,由Realm提供
比如授权的流程
使用PermissionAuthorizationFilter
在xml中设置权限
${adminPath}/areaInfo = perms[area:query,area:add]
当发出这个请求(已经验证通过)被PermisssionsAuthorizationFilter拦截,发现需要权限
会调用realm的doGetAuthorizationInfo获取数据库中正确的数据库权限(所以realm的作用 就是查询,剩下的活是shiro的)
PermissionAuthorizationFilter对请求的url对应的权限和从realm中获取的权限进行对比
登录和授权,realm只提供查找返回,不提供逻辑处理,都由shiro解决
拿login来分析
当请求信息是login时,FormAuthenticationFilter会对其进行拦截,解析是不是login请求,并处理
//FormAuthenticationFilter 判断是不是一个login请求
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
if (isLoginRequest(request, response)) {
if (isLoginSubmission(request, response)) {
if (log.isTraceEnabled()) {
lo


8308

被折叠的 条评论
为什么被折叠?



