一:拦截器
Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
用户可以自己定义一些拦截器来实现特定的功能。它也是 AOP 思想的具体应用。自定义拦截器, 要求必须实现:HandlerInterceptor 接口
过滤器和拦截器区别:
过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用。
拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。
过滤器在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是 jsp,html,css,image 或者 js 是不会进行拦截的。
配置拦截器:springmvc.xml里面
<!--配置拦截器-->
<mvc:interceptors>
<!--配置1个拦截器(前台登陆拦截器)-->
<mvc:interceptor>
<!--被拦截的路径 , /** 第1个星是1级路径 ,第二个是 二级路径
/**/* 代表拦截所有路径-->
<mvc:mapping path="/back/**"/>
<mvc:mapping path="/param/**"/>
<!--<mvc:mapping path="/**/*"/>-->
<!--放行登陆路径-->
<mvc:exclude-mapping path="/user/**"/>
<!--配置自定义拦截器-->
<bean class="cn.hp.interceptor.LoginInterceptor"/>
</mvc:interceptor>
<!--2.后台登陆拦截器-->
</mvc:interceptors>
创建 :cn.hp.interceptor.LoginInterceptor
实现成Interceptor
public class LoginInterceptor implements HandlerInterceptor {
/**
* return true : 代表放行 (已登陆)
* return false : 代表拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1. 拿到session中user
String user = (String) request.getSession().getAttribute("user");
if(StringUtils.isEmpty(user)){ //如果为空 , 要去登陆
response.sendRedirect("/login.jsp");
return false;
}else{
if(user.equals("admin")){
return true;
}else{ //非必须判断
response.sendRedirect("/login.jsp");
return false;
}
}
}
}
过滤器和拦截器的区别:
过滤器:是servlet规范中的一部分,任何java web工程都可以使用。
拦截器:是SpringMvc框架自己的,只有使用了SpringMvc框架的工程才能用。
过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。