概述
拦截器
在我们的程序中,请求网页时,我们都会判断该用户是否登陆,若未登陆,重定向到登陆页面。如果我们每一次请求都判断一下是否登陆,显然是不现实的。
SpringMVC提供了拦截器,也就是每一次请求都会拦截并作出相应判断。若判断成功放行,否则阻止或者重定向到相应页面!我们拿登陆为例演示:
- 写一个拦截器类,实现HandlerInterceptor接口,并重写他的三个方法
public class LoginInterceptor implements HandlerInterceptor {
@Override
//请求之前调用的方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
//从session中获取用户名
String userName = (String) session.getAttribute("userName");
//判断是否存在用户名,如果不存在代表未登录
if(StringUtils.isEmpty(userName)){
//重定向到登陆请求
response.sendRedirect(request.getContextPath()+"/login.form");
//阻止继续运行
return false;
}
//用户名存在,代表已登陆,放行,继续运行
return true;
}
@Override
//请求之后调用的方法
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
//请求完成调用的方法
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
- 在Spring的配置文件中配置拦截路径
关于springmvc的配置文件的头内容,可参考官方文档Springmvc官方
<!--配置拦截器链-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--拦截路径,可配置多个-->
<mvc:mapping path="/a.form"/>
<mvc:mapping path="/b.form"/>
<!-- 也可设置全部拦截 -->
<mvc:mapping path="/*.form"/>
<!--不拦截路径,即白名单,可配置多个-->
<mvc:exclude-mapping path="/c.form"/>
<bean class="sml.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
过滤器
浏览器的编码默认是ISO8859,解决乱码问题,统一编码格式,我们可以使用JavaEE提供的过滤器。
在web.xml中加入该配置,解决前端传后台中文数据乱码问题。如果webapp报红,说明webapp头配置的版本较低,自行百度更改
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注:过滤器(Filter
)是Java EE中的组件,则任何一个Java的WEB项目都可以使用过滤器;而拦截器(Interceptor
)是SpringMVC中的组件,仅当使用了SpringMVC框架才可以使用这个拦截器,并且,仅当被SpringMVC框架处理的请求才有可能被拦截器进行处理,假如将DispatcherServlet
的路径映射为*.form
,则只有以.form
作为后缀的请求才可能被拦截器处理,其它请求是不会被拦截器处理的!
在这里我只是举了个简单的例子进行演示,他的用法还有很多,比如打印日志,监听等。
最后
以上就是耍酷曲奇为你收集整理的SpringMVC拦截器与JavaEE过滤器的使用及区别的全部内容,希望文章能够帮你解决SpringMVC拦截器与JavaEE过滤器的使用及区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复