我發現我可以繞過登陸這一環節,直接在瀏覽器輸入要訪問的頁面就能就去,這是個大問題啊,如果有人知道我的目錄結構,可以暢通無阻啊,為此,得驗證用戶是否登錄,如果登陸,正常,否則跳轉到登陸頁面。我使用了兩種方法。
法一:寫個文件驗證,在需要驗證的頁面將此文件引入(我寫的是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>