当前位置:编程学习 > JS >>

拦截JSP页面,校验是否已登录

 最近使用struts2做项目,需要拦截JSP以校验是否已经登,但struts2的过滤器链只能过滤action。后来发现在web.xml里可以直接增加javax.servlet.Filter实现类的过滤器,可以过滤JSP。请看代码
Filter实现类
[java]  
<span style="font-size:18px;">package com.common;  
  
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;  
  
public class LoginFilter extends HttpServlet implements Filter {    
        
    private static final long serialVersionUID = 1L;    
    
    @Override    
    public void doFilter(ServletRequest request, ServletResponse response,    
            FilterChain chain) throws IOException, ServletException {    
        HttpServletRequest req = (HttpServletRequest)request;    
        HttpServletResponse res = (HttpServletResponse)response;    
        String path = req.getContextPath();  
        String indexPath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+ "/pages/login.jsp";  
        if(req.getRequestURI().endsWith("login.jsp"))  
        {  
            chain.doFilter(request, response);   
            return;  
        }  
          
        Object loginuser = req.getSession().getAttribute("<strong><span style="color:#ff0000;">loginSession</span></strong>");    
        if(loginuser == null){  
            res.sendRedirect(indexPath);    
            return;    
        }  
        chain.doFilter(request, response);    
    }    
    
    @Override    
    public void init(FilterConfig arg0) throws ServletException {    
        // TODO Auto-generated method stub     
    }    
    
}    
</span>  
登录方法:
[java] 
<span style="font-size:18px;">  public String login()  
    {  
        Login login = new Login();  
              
        //.......校验登录信息  
        ActionContext ctx = ActionContext.getContext();  
        Map<String, Object> session = ctx.getSession();  
        session.put("<strong><span style="color:#ff0000;">loginSession</span></strong>", login);  
        return "success";  
    }</span>  
 web.xml配置
[html]  
<filter>    
     <filter-name>setlog</filter-name>    
     <filter-class>com.common.LoginFilter</filter-class>    
</filter>    
<filter-mapping>    
     <filter-name>setlog</filter-name>    
     <url-pattern>/pages/home.jsp</url-pattern>  
     <url-pattern>/pages/channel/*</url-pattern>  
     <url-pattern>/pages/content/*</url-pattern>  
     <url-pattern>/pages/product/*</url-pattern>  
     <url-pattern>/pages/vodtask/*</url-pattern>  
</filter-mapping>  
 
注意,如果页面上使用了框架,则可能导致session超时后退出到登录页面,此时登录页面显示在框架的某个子页面,解决方法,在登录页面加入如下代码即可。
[html]  
<span style="font-size: 18px;">    <script language="javascript">     
        if (top != window)     
            top.location.href = window.location.href;     
    </script></span>  
 
补充:Web开发 , Jsp ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,