Struts2使用过滤器验证登陆状态

在Web.xml中增加个配置过滤器loginFilter(记住要写在struts2的配置前面):

    <filter>       
         <filter-name>loginFilter</filter-name>       
         <filter-class>com.filter.LoginFilter</filter-class>       
    </filter>       
    <filter-mapping>    
         <filter-name>loginFilter</filter-name>    
         <url-pattern>/*</url-pattern>    
    </filter-mapping>  

在处理登陆的action中,登陆成功后,往session中写入一个值,作为是否登陆的标记,这里写入用户名username:

HttpServletRequest request = ServletActionContext.getRequest();
request.getSession().setAttribute("username", username);


 

然后编辑相应的过滤器类LoginFilter,过滤器检查session中username的值是否为空,为空则跳转至登陆页面:

package com.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.HttpServlet;  
 import javax.servlet.http.HttpServletRequest;  
 import javax.servlet.http.HttpServletResponse;  
 import javax.servlet.http.HttpSession;  
   
 public class LoginFilter extends HttpServlet implements Filter {  
     public void destroy() {  
     }  
   
     public void doFilter(ServletRequest sRequest, ServletResponse sResponse,        
             FilterChain filterChain) throws IOException, ServletException{  
           
         HttpServletRequest request = (HttpServletRequest) sRequest;        
         HttpServletResponse response = (HttpServletResponse) sResponse;        
         HttpSession session = request.getSession();        
         String url=request.getServletPath();    
         String contextPath=request.getContextPath();    
         if(url.equals("")) url+="/";    
         if((url.startsWith("/")&&!url.startsWith("/login"))){//若访问后台资源 过滤到login     
              String user=(String)session.getAttribute("username");    
              if(user==null){//转入管理员登陆页面     
                   response.sendRedirect(contextPath+"/login.jsp");   
                   return;    
              }    
         }    
           filterChain.doFilter(sRequest, sResponse);      
     }    
   
     public void init(FilterConfig arg0) throws ServletException {  
   
     }  
 }  

 

 

我自己的doFilter:

ps.我把jsp页面放在WEB-INF下面,所以LoginJsp是我写的一个action链接到WEB-INF下的login.jsp

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		HttpSession session  = request.getSession();
		
		String url = request.getServletPath();
		String contextPath = request.getContextPath();
		String sessionName = (String) session.getAttribute("userName");
		if(sessionName==null && !url.equals("/LoginJsp") ){
			response.sendRedirect("LoginJsp");
		}else{
		arg2.doFilter(arg0, arg1);}
	}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值