CodeFilter(字符过滤) and SessionFilter(会话过滤器)

泪湿孤枕 提交于 2020-02-23 01:22:33

CodeFilter(字符过滤)

对于jsp/html/css/js/servlet的请求都会经过过滤器

对于响应类型不能去设置。否则会造成对于css文件的请求输出成html导致无法显示

private String code;
	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      //对于jsp/html/css/js/servlet的请求都会经过过滤器
      //对于响应类型就不能去设置。否则会造成对于css文件的请求输出成html,导致无法显示
		request.setCharacterEncoding(code);
		response.setCharacterEncoding(code);
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
        code=fConfig.getInitParameter("code");
	}

CodeFilter在web.xml要这样配置

设置了CodeFilter(字符过滤)后,去掉这两行代码,还是要保留响应成html的代码

SessionFilter(会话过滤器)

/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest)request;//向下转型,转成和HTTP协议相关的请求和响应
		HttpServletResponse res=(HttpServletResponse)response;
		HttpSession session=req.getSession();
		User user=(User)req.getAttribute("loginUser");
		String servletPath=req.getServletPath();
		//判断是否是登录页,登录servlet
		//indexOf是为包含
		if(servletPath!=null && servletPath.indexOf("/index.jsp")!=-1
				||servletPath.indexOf("/LoginServlet")!=-1
				||servletPath.indexOf(".css")!=-1
				||servletPath.indexOf(".jpg")!=-1
				||servletPath.indexOf(".png")!=-1) {
			chain.doFilter(request, response);//执行下一个过滤器,没有下一个过滤器,就直接访问到目标servlet
		}else {
			//比如登录界面、登录servlet请求,是不需要登录状态就可以直接访问的
			if(user!=null) {
				//没有经过servlet,所以还是要写
				response.setContentType("text/html");
				request.setCharacterEncoding("UTF-8");
				
				PrintWriter out =response.getWriter();
				out.println("<script>");
				out.println("window.alert('会话失效了!');");
				out.println("window.top.location.href='"+req.getContextPath()+"/index.jsp';");
				out.println("</script>");
				
			}else {
				chain.doFilter(request, response);//执行下一个过滤器,没有下一个过滤器,就直接访问到目标servlet
			}
		}
	}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!