过滤器Filter
Posted duguangming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器Filter相关的知识,希望对你有一定的参考价值。
使用背景:
一个项目中需要做多次需求判断时,例如商城中加入购物车需要登陆判断,我的购物车需要需求判断,我的 订单、我的收藏等等,都需要做是否登陆判断,就可以使用过滤器,把这些需求过滤下来。
使用步骤:
1 创建一个包 com.xxx.filter
2 在包中创建一个类 实现 Filter接口和三个实现方法
3 在 doFilter中
@Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException { // 设置编码方式 req.setCharacterEncoding("UTF-8"); filterChain.doFilter(req,resp);//放行 }
4 在 web.xml配置
<filter> <filter-name>dd</filter-name> <filter-class>com.guangming.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>dd</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
/* 所有请求都过滤
/emp/* 过滤 emp下所有请求
*.do 过滤所有以.do结尾的请求
5.过滤器代码
@WebFilter("*.do")//拦截需要进行登陆校验的请求 加入购物车和我的购物车(addCart.do/myCart.do) public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { /*判断是否登陆*/ //为什么强转成HttpServlet: ServletRequest没有getSession().setAttribute方法 HttpServletRequest req= (HttpServletRequest) request; HttpServletResponse resp= (HttpServletResponse) response; Object user = req.getSession().getAttribute("user"); if (user==null){ //session中没有获取到用户信息,证明没有登陆,则跳转到登陆界面 resp.sendRedirect("/shop/views/login.jsp"); }else { /*不加else,未放行,界面加载不出来*/ //session中获取到了用户信息,证明已经登陆,则放行 filterChain.doFilter(req,resp); } } @Override public void destroy() { } }
以上是关于过滤器Filter的主要内容,如果未能解决你的问题,请参考以下文章