过滤器的使用

来源:互联网 发布:苹果助手下载软件 编辑:程序博客网 时间:2024/05/18 01:13

当我们需要防止未登录的用户访问内部资源时,可以使用过滤器来。过滤器即在用户发出请求的时候进行一些条件的过滤,如判断用户是否为空,编码方式等。

下面通过一个登录过滤器来判断用户是否已经登录系统了,登录则允许访问.jsp页面。否则跳转到登录页面。

LoginFilter.Java

        package cn.itcast.fiter;


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{


@Override
public void destroy() {

}


@Override
/**
* 所有以.jsp结尾的请求都会经过这个方法的过滤 ,如果要过滤所有的请求,可以在web.xml文件配置为/*
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chin) throws IOException, ServletException {
HttpServletRequest re = (HttpServletRequest) request;


HttpServletResponse rs = (HttpServletResponse) response;


//获得session
HttpSession session = re.getSession();


//这里得到的是绝对路径:域名+项目名+具体页面请求
StringBuffer url = re.getRequestURL();


//这里得到是除域名外的路径:项目+具体请求
String url2 = re.getRequestURI();
System.out.println("url="+url);//url=http://localhost:8080/SSH/index.jsp
System.out.println("ur2="+url2);//ur2=/SSH/index.jsp


//取出存放在session中的值
String user = (String) session.getAttribute("user");


//这里得到的只是项目的路径且不包括域名
String contpath = re.getContextPath();
System.out.println("contpath="+contpath);//contpath=/SSH


if(url2!=null&&url2.equals(contpath+"/login.jsp")||url2.equals(contpath+"/reg.jsp")){
//如果相等说明请求的是登录页面,可以放行
chin.doFilter(request, response);
return;


}else if(user==null||"".equals(user)){
//如果用户名为空,说明用户还没有登录,进行重定向到登录页面
rs.sendRedirect(contpath+"/login.jsp");
}else{
//否则用户不为空,放行
chin.doFilter(request, response);
}
}


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

}
}


web.xml的配置:

  <!-- 自定义登陆过滤器 -->
<!--     <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>cn.itcast.fiter.LoginFilter</filter-class>
    </filter> -->

   <!-- 如果过滤所有的请求,/*,则登录页面图片显示不出来 -->
<!--    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
   </filter-mapping> -->

0 0
原创粉丝点击