我正在使用spring 3 struts 2和hibernate开发一个应用程序。登录后我只需要显示页面
工作正常。当我测试时发现了一个大错误
即我复制需要仅向登录用户显示的页面的URL 并将其粘贴到其他浏览器中意味着它正在显示页面而无需登录。
<%
String userId= (String)session.getAttribute("userId");
System.out.println(userId);
if(userId == null || userId.equals("") ){
response.sendRedirect("login.jsp");
}
%>
我已经为所有jsp包含了这个。我知道这不是最好的做法。有更好的选择吗?
我将如何克服此错误?
答案 0 :(得分:0)
if(userId == null || userId.equals("") ){
response.sendRedirect("login.jsp");
}
应该在那里返回以防止呈现页面内容:
if(userId == null || userId.equals("") ){
response.sendRedirect("login.jsp");
return;
}
javadoc中没有任何内容表明sendRedirect
导致突然退出或导致响应正文无法发送给客户端。
可能发生的情况是您的回复包含重定向标题,但也包含您可能不打算发送的页面内容。
答案 1 :(得分:0)
我还在接受教育,所以知道我的解决方案有多好,但我没有崩溃所以希望它是正确的
它与@muthu的代码非常相似
我曾使用过JPA-eclipselink和Struts2
行动类
String checkLogin = "SELECT user FROM UserEntity user WHERE user.username = :username AND user.password = :password";
Query checkLoginQuery = em.createQuery(checkLogin);
checkLoginQuery.setParameter("username", loginUsername);
checkLoginQuery.setParameter("password", loginPassword);
userEntity = (UserEntity) checkLoginQuery.getSingleResult();
Map sessionMap = ActionContext.getContext().getSession();
sessionMap.put("userEntity", userEntity);
JSP - &gt;所有jsp页面都有这个(如果浏览器没有关闭会话就不会被破坏,则会受到影响)
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:if test="%{#session.userEntity == null}">
<jsp:forward page="login.jsp"/>
</s:if>
如果我错了,请纠正我
两者和RequestDispatcher.forward()都是我所说的“服务器端”重定向
response.sendRedirect()就是我称之为“客户端”的重定向。
所以服务器端前进对我来说看起来更安全,也许我错了(如果我错过了解释它,我很抱歉,还没有在现实生活项目中工作)