jsp验证用户是否登陆


  我发现我可以绕过登陆这一环节,直接在浏览器输入要访问的页面就能就去,这是个大问题啊,如果有人知道我的目录结构,可以畅通无阻啊,为此,得验证用户是否登录,如果登陆,正常,否则跳转到登陆页面。我使用了两种方法。

    法一:写个文件验证,在需要验证的页面将此文件引入(我写的是testsession.jsp)

     <%
  
  if(session.getAttribute("user")==null)
  {%>
  <h1>未登录!</h1>
        3秒后跳转到登录页面
        <p>
        如果没有跳转,请点<a href="login.jsp">这里</a></p>
    <%
        response.setHeader("refresh","3;URL=login.jsp");
        return;
   }
   %>

比如说我的main.jsp页面需要验证,只需在此此页面顶端添加语句<%@ include file="testsession.jsp"%>

法二:使用过滤器进行验证

package p2;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginCheckFilter implements Filter{
    public void init(FilterConfig filterConfig)throws ServletException{}
    public void destroy(){}
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
        throws IOException,ServletException
    {
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse res=(HttpServletResponse)response;
        request.setCharacterEncoding("gb2312");//设置字符编码
        response.setCharacterEncoding("gb2312");
        res.setHeader("Pragma", "No-cache");//禁止缓存
        res.setHeader("Cache-Control","no-cache");
        res.setHeader("Expires", "0");
        PrintWriter out=res.getWriter();
        HttpSession session=req.getSession();
        if(session.getAttribute("user")!=null){
            chain.doFilter(request, response);
        }
        else{
               out.println("<script>alert('您没有登录登录,请先登录!');this.location.replace('../login.jsp','_parent'); </script>");
        
        }
    }

}

然后配置filter即可,但此时出现了问题,循环重定向,因为login.jsp页面也是需要验证的,而此时用户没有登录,session肯定为null,又重定向到了login.jsp,由此出现了循环重定向。为此我将login.jspye页面分离出来,新建文件夹aa,将需要验证的页面全部放到aa中,配置filter如下:

<filter>
    <filter-name>loginCheck</filter-name>
    <filter-class>p2.LoginCheckFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>loginCheck</filter-name>
    <url-pattern>/aa/*</url-pattern>
    </filter-mapping>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM