在servletfilter中正确的使用重定向
Posted zshjava
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在servletfilter中正确的使用重定向相关的知识,希望对你有一定的参考价值。
在filter中使用重定向时要注意,在重定向后不需要在调用 filterChain.doFilter()。因为过滤已经结束了再调用的话会产生getWriter()方法非法使用的错误
1 package com.zsh.project.exam.config; 2 3 import javax.servlet.*; 4 import javax.servlet.annotation.WebFilter; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import javax.servlet.http.HttpSession; 8 import java.io.IOException; 9 10 /** 11 * @author shihai.zhang 12 * @date 2019/3/19 0019 13 */ 14 @WebFilter(urlPatterns = {"/student/*" ,"/teacher/*"}) 15 public class SecurityFilter implements Filter { 16 @Override 17 public void init(FilterConfig filterConfig) throws ServletException { 18 19 } 20 21 /** 22 * 在filter中进行重定向时需要用if else 不然会导致 getWriter()被非法调用的错误 23 * @param servletRequest 24 * @param servletResponse 25 * @param filterChain 26 * @throws IOException 27 * @throws ServletException 28 */ 29 @Override 30 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 31 HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest; 32 HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; 33 HttpSession httpSession = httpServletRequest.getSession(); 34 if(httpSession.getAttribute("userName")==null){ 35 ((HttpServletResponse) servletResponse).sendRedirect("login"); 36 }else{ 37 filterChain.doFilter(servletRequest, servletResponse); 38 } 39 } 40 41 @Override 42 public void destroy() { 43 44 } 45 }
注:在jsp中地址最好用<:ulr>来产生URL,否则当地址栏地址变了之后上下文也会变,会导致错误
以上是关于在servletfilter中正确的使用重定向的主要内容,如果未能解决你的问题,请参考以下文章