在Struts 2 spring应用程序中添加安全性

时间:2013-09-18 04:38:40

标签: java spring hibernate struts2

我正在使用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包含了这个。我知道这不是最好的做法。有更好的选择吗?

我将如何克服此错误?

2 个答案:

答案 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>


如果我错了,请纠正我

Quoting this page

  

两者和RequestDispatcher.forward()都是我所说的“服务器端”重定向

     

response.sendRedirect()就是我称之为“客户端”的重定向。

所以服务器端前进对我来说看起来更安全,也许我错了(如果我错过了解释它,我很抱歉,还没有在现实生活项目中工作)