----------------------过滤器filter简单登录和乱码过滤----

web.xml里面的代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>

  <!-- 编码过滤器 -->
  <filter>
    <filter-name>CharactorEncodingFilter</filter-name>
    <filter-class>cn.happy.filter.CharacterEncodingFilter</filter-class>
  </filter>
  
   <!-- 鉴权过滤器 -->
  <filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>cn.happy.filter.SessionFilter</filter-class>
    <!-- 初始化参数 -->
    <init-param>
       <param-name>execuldeUrl</param-name>
       <param-value>/servlet/(Login|Register)Servlet</param-value>
    </init-param>
  </filter>
  
  
  
  <!-- 按照书写先后顺序  ,执行顺序按照Sevlet-Mapping 书写顺序 -->
  <filter-mapping>
       <filter-name>CharactorEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 需要权限的页面 -->
  <filter-mapping>
       <filter-name>SessionFilter</filter-name>
       <url-pattern>/jsp/*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
       <filter-name>SessionFilter</filter-name>
       <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>
  
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>cn.happy.servlet.LoginServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/servlet/LoginServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

servlet里面的代码

package cn.happy.filter;

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SessionFilter implements Filter {
	Pattern patternUrl;
    //能从配置文件获取内容
	public void init(FilterConfig config) throws ServletException {
		String url=config.getInitParameter("execuldeUrl");  ///servlet/LoginServlet
		if(url!=null&&!url.equals("")){ //配置了例外
			//为了获取到一个正则对象  
			patternUrl= Pattern.compile(url); //我们定制的正则规范 /servlet/LoginServlet
		}
	}
	
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest req=(HttpServletRequest)request;
		HttpServletResponse res=(HttpServletResponse)response;

		//路径中包含 /servlet/LoginServlet  方向
		String servletPath = req.getServletPath();
		System.out.println(servletPath+"===========================");
		if(patternUrl.matcher(servletPath).matches()){
			chain.doFilter(request, response);
			return;
		}
		
		
		Object sessionObj = req.getSession().getAttribute("uname");
		if(sessionObj!=null){  //证明用户已经登录了
			//放行
			chain.doFilter(request, response);
		}else{
			System.out.println("session filter not session data");
			//证明用户没有登录,返回到登录   /Jsp-Day05Filter
			res.sendRedirect(req.getContextPath()+"/login.jsp");
		}
	}
	public void destroy() {
		
	}

	

}

  

posted @ 2017-08-17 18:58  花落知到啥  阅读(149)  评论(0编辑  收藏  举报