白白白

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  129 随笔 :: 0 文章 :: 0 评论 :: 54198 阅读

web中

在xml中配置  

复制代码
<filter>
  <filter-name>shiroFilter</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  <async-supported>true</async-supported>
  <init-param>
    <param-name>targetFilterLifecycle</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>
复制代码

web.xml 中配置了shiroFilter代理,以后每当request请求时都会被改代理拦截,然后代理中调用真正的被代理filter执行处理(还没有弄清楚真正的代理对象怎么变成Filter)

DelegatingFilterProxy中初始化  delegate的过程

根据该<filter>配置中的 <filter-name>=shiroFilter去spring工厂中getBean("shiroFilter",Filter.class) 最终获取到  

org.apache.shiro.spring.web.ShiroFilterFactoryBean 的一个单实例,可以看到 ShiroFilterFactoryBean没有实现任何Filter接口,

Filter delegate = wac.getBean(getTargetBeanName(), Filter.class); 生成该Filter

 

被代理的对象  org.apache.shiro.spring.web.ShiroFilterFactoryBean

 

Spring生成的是ShiroFilterFactoryBean代理对象 实际上是个Filter

 

 

在spring.xml中配置

 

复制代码
<!-- Shiro的Web过滤器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="/login.jsp"/>
        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
        <property name="filters">
            <util:map>
                <entry key="authc" value-ref="formAuthenticationFilter"/>
            </util:map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /index.jsp = anon
                /unauthorized.jsp = anon
                /login.jsp = authc
                /logout = logout
                /** = user
            </value>
        </property>
    </bean>
复制代码

 

 

 

 后面所有的处理都是 DelegatingFilterProxy中交给 delegate 去执行的,实际上就是执行一个过滤器链

 

 

 

auth

 

 

 表单登录

 

 真正调用Realm auth的地方

 

 

 

 retryCount判断

 

 

密码匹配

 

登录成功------

 

AdviceFilter 切面过滤hasRole 等注解

 

AccessControlFilter

isAccessAllowed  判断是否登录(身份是否有效)

onAccessDenied

 

 

 

 

shiro拦截器链: http://blog.csdn.net/angel_g/article/details/53993877

 

 

 

权限校验是通过methodInterceptor方式

 

 

 Eclipse Debug中方法栈,

Filter处理完 ,后面通过MethodInterceptor方式处理@hasRole 等注解检查权限操作

 

 

spring mvc中 

org.springfreamwork.web.servlet.DispatherServlet  中通过HandleMapping将 controller中 方式上的 requestMapping将 该方法关联起来

 

 HandlerMapping 中 HandlerExecutionChain   中的Handler为 HandlerMethod

 

 

 

每个HandingMapping可以配置  handlerInterceptor

 

DispatcherServlet中 doService() 中调用doDispatch方法

 

 

 

========================================================================================

shiro-web集成spirng   权限,角色@hasRole  注解校验入口

 

 

切面方式

 

posted on   道至简  阅读(11150)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示