Filter过滤器

来源:互联网 发布:淘宝美食店铺吐血推荐 编辑:程序博客网 时间:2024/06/12 19:54
package com.lanou.filter;


import java.io.IOException;




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;
import javax.servlet.http.HttpSession;


public class LoginFilter  implements  Filter{


//黑名单 不需要拦截直接放行的
String[] exculde = new String[] {"helloWeb.html","register.html"};
@Override
public void destroy() {


}


@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
System.out.println("我是过滤器LoginFilter");
//强转req和resp
   HttpServletRequest request=(HttpServletRequest) req;
   HttpServletResponse response=(HttpServletResponse) resp;
// Enumeration<String>  headers =request.getHeaderNames();
//requestURL使我们可使用的内容
               
   //RequestURI是我们可以使用的内容。
String target = request.getRequestURI();
System.out.println(request.getRequestURL());
if(isExculde(target)) {
chain.doFilter(request, response);
} else {
doFilterMyHtml(request, response,chain);
}

}
/**
* 此方法用来判断是否是不需要拦截的的
* @param target
* @return
*/
public boolean isExculde(String target){

boolean flag=false;
for(String str:exculde){
  if(target.indexOf(str)>0){
  flag=true;
  break;
  }
}
return flag;
}
/**
* 拿到需要对比的username

* @param request
* @param response
* @param chain
* @throws IOException
* @throws ServletException
*/
   public void doFilterMyHtml(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException{
   //通过request获取session
   HttpSession session=request.getSession();
   //拿到浏览器中记录的session中保存的username
   String username=(String) session.getAttribute("username");
   //如果不为空则放行,否则调回登录页面
   
   if(username!=null &&!username.isEmpty()){
   //通过
   chain.doFilter(request, response);
   }else{
   //跳转到登录页面
   response.sendRedirect("helloWeb.html");
   }
   }
@Override
public void init(FilterConfig arg0) throws ServletException {


}


}

web.xml配置

 <filter>

 <filter-name>loginFilter</filter-name>

 <filter-class>com.lanou.filter.LoginFilter</filter-class>

 </filter>

 <filter-mapping>

 <filter-name>loginFilter</filter-name>

 <url-pattern>*.html</url-pattern>


拦截单个页面

package com.lanou.filter;


import java.io.IOException;


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;
import javax.servlet.http.HttpSession;
/**
 * 通过角色过滤,学生登录不能打开insertStudent.html
 * @author xalo
 *
 */
public class RoleFilter  implements Filter{


//黑名单 不需要拦截直接放行的

public void destroy() {

}


@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
System.out.println("我是过滤器RoleFilter");
//强制转化resp和req
       HttpServletRequest  request=(HttpServletRequest) req;
       HttpServletResponse  response=(HttpServletResponse) resp;



HttpSession  session=request.getSession();
       //2代表老师,1代表学生
     Integer role= (Integer) session.getAttribute("role");
      System.out.println("roleFilter的角色是"+role);
      if(role!=null && role==0 ){
       response.sendRedirect("helloWeb.html");
       return ;
      } 
      chain.doFilter(request, response);
      
}


public void doFilterMy(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException{

}
@Override
public void init(FilterConfig arg0) throws ServletException {

}




}

web.xml配置

<filter>

 <filter-name>RoleFilter</filter-name>

 <filter-class>com.lanou.filter.RoleFilter</filter-class>

 </filter>

 <filter-mapping>

 <filter-name>RoleFilter</filter-name>

 <url-pattern>/insertStudent.html</url-pattern>

 </filter-mapping>