springmvc中有两种很普遍的AOP实现:
1.过滤器(Filter)
2.拦截器(Interceptor)
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。
这两个都是拦截请求但是有区别
区别如下:
1 、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2 、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3 、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4 、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5 、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
拦截器的配置
<!-- 4. 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有的mvc控制器 -->
<mvc:mapping path="/**"/>
<!-- mvc:exclude-mapping - 是另一种拦截,他可以在你后来测试中对某一个页面进行不拦截
,这样 就不要在LoginInterceptor中获取登陆的url,进行放行 -->
<mvc:exclude-mapping path="/userInfoController/doLogin.do"/>
<!-- 告诉使用哪一个拦截器 -->
<bean class="com.zrgj.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
配置放行
<security:http auto-config="true" use-expressions="true">
<!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER的角色" -->
<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
<security:form-login login-page="/login.jsp"
login-processing-url="/login.do"
default-target-url="/index.jsp"
authentication-failure-url="/failer.jsp"
authentication-success-forward-url="/pages/main.jsp"/>
<!-- 关闭跨域请求 -->
<security:csrf disabled="true"/>
<!--退出并跳转到首页-->
<security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp"></security:logout>
</security:http>