如何使用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 req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; HttpSession session = req.getSession(true); //??session????????????? String username = (String)session.getAttribute("username"); //?????????????????????????????违p????????? if("".equals(username) || username == null){ //?p????????? res.sendRedirect("/TSIMS/NoAuthority.jsp"); }else{ if(!"40".equals(username.substring(0,2))) { res.sendRedirect("/TSIMS/NoAuthority.jsp"); }else{ //????????,???M?????? chain.doFilter(request,response); } } } /* * (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig config) throws ServletException { }}