现在的位置: 首页 > 综合 > 正文

jsp验证用户是否登陆

2018年04月01日 ⁄ 综合 ⁄ 共 1631字 ⁄ 字号 评论关闭

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

法一:写个文件验证,在需要验证的页面将此文件引入(我写的是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>

抱歉!评论已关闭.