Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2291890
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: 系统运维

2011-12-13 16:03:15

实现用户登录控制
 
1  userFilter.java
  1. package Filter;

  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.io.*;

  5. public class userFilter implements Filter{
  6.     private FilterConfig filterConfig;
  7.     private String loginPage = "../index.jsp";

  8.     public void init (FilterConfig filterConfig) throws ServletException{}
  9.     
  10.     public void doFilter (ServletRequest request,
  11.             ServletResponse response,
  12.             FilterChain chain) throws IOException,ServletException{
  13.         
  14.         HttpServletRequest httpReq = (HttpServletRequest)request;
  15.         HttpServletResponse httpResp = (HttpServletResponse)response;
  16.         HttpSession session = httpReq.getSession(true);
  17.         String username = (String)session.getAttribute("username");

  18.         //如果封装的user不为空,说明已经登陆,则继续执行用户的请求.下面的就不处理了

  19.         if(username!=null){
  20.                chain.doFilter(request,response);
  21.                return;
  22.         }else{//想在这里实现,没有登陆时跳转到登陆页面

  23.    
  24.             httpResp.sendRedirect("../tips.jsp");

  25.         }


  26.         
  27.     }
  28.     
  29.     
  30.     public void destroy(){
  31.         
  32.     }

  33. }

 

2  web.xml 配置

 

  1. <filter>
  2.   <filter-name>userFilter</filter-name>
  3.   <filter-class>Filter.userFilter</filter-class>
  4.   </filter>
  5.   <filter-mapping>
  6.   <filter-name>userFilter</filter-name>
  7.   <url-pattern>/ygtd/ygtd.jsp</url-pattern>
  8.   </filter-mapping>

 

说明: 用户访问/ygtd/ygtd.jsp这个文件的时候 就会判断用户是否登录 用户未登录的话就会转到tips.jsp

 

 

元素用于指定过滤器关联的url样式或者Servlet。

其中子元素的值必须是在元素中声明过的过滤器的名字。元素和元素可以选择一个;元素指定过滤器关联的URL样式;元素指定过滤器对应的Servlet。用户在访问元素指定的URL上的资源或元素指定的Servlet时,该过滤器才会被容器调用。元素还可以包含0到4个,指定过滤器对应的请求方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST.

 

·REQUEST
  当用户直接访问也面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。

·INCLUDE
  如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

·FORWARD
  如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

·ERROR
  如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。


例子:

 


 testFilter
 /test.jsp

当用户访问test.jsp页面时,容器就会调用testFilter过滤器。

 

 


 testFilter
 /index.jsp
 REQUEST
 FORWARD

当用户直接访问index.jsp页面,或者通过RequestDispatcher的forward()方法访问时,容器就会调用testFilter过滤器。

 

 

阅读(6267) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

xueliangfei2011-12-15 17:02:48

☆彼岸★花开: 对登录其他方面的控制还能有所改进吧~.....
恩 是啊  这个只是验证了Filter的例子

☆彼岸★花开2011-12-15 02:31:35

对登录其他方面的控制还能有所改进吧~