日期:2014-05-17  浏览次数:21041 次

如何使用filter实现未登录用户自动跳转到登录页面(在线等答案)
工程要实现未登录的用户统一跳转到某一页面,这个我想在filter里取到当前用户,如果取不到则跳转到登录页面,但是我在filter中使用((HttpServletResponse)response).sendRedirect("/index.jspx");和request.getRequestDispatcher("/index.jspx").forward(request,response);均不能跳转到登录页面,请问可能是哪里出了问题。
还有没有其他方法实现这功能。
在线等答案

------解决方案--------------------
HttpServletResponse httpServletResponse = (HttpServletResponse) resp; 
HttpServletRequest httpServletRequest = (HttpServletRequest) req; 
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/index.jsp");

你的怎么是index.jspx?
jspx是啥?
------解决方案--------------------
要注意以下几点:
1、要用filter做权限拦截,一定要将拦截的资源放到某一目录下,或文件名用统一的前缀编码,否则((HttpServletResponse)response).sendRedirect("/index.jspx")会死循环
做法:一般都在web.xml中的<filter-mapping>的<url-pattern>标签中指定

2、当检查到是登录状态的,是否调用了chain.doFilter(request,response)放行

3、当用((HttpServletResponse)response).sendRedirect("/index.jspx")跳转时,则不需要调用chain.doFilter(),但后面的代码不会处理,一般会跟上个return语句来结束处理。
------解决方案--------------------
Java code

public class LoginFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        HttpSession session = req.getSession();
        StringBuffer url = req.getRequestURL();
        String login = (String) session.getAttribute("login");
    
        if (login!=null) {
                     //如果已经等了通过
            chain.doFilter(request, response);
        }else if (url.indexOf("login.do")>0||url.indexOf("login.jsp")>0) {
                          //可以访问jsp,也可以访问login。do对应的servlet,通过
            chain.doFilter(request, response);
        }
        
        else {
            
            resp.sendRedirect("/3G/login/login.jsp");
        }
        
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        
    }

    

}

------解决方案--------------------
Java code

package group3.tsims.tools;

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 AdminAuthorityFilter implements Filter {
    /*
     * (non-Javadoc)
     * @see javax.servlet.Filter#destroy()
     */
        public void destroy() {
            

        }
    /*
     * (non-Javadoc)
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            HttpServletRequest r