SpringMVC需要登录才能使用会话查看页面

时间:2012-01-18 18:50:20

标签: java servlets spring-mvc

我已经构建了一个工作正常的简单SpringMVC登录系统,但我想限制页面说只有使用有效登录才能看到它们。如果我只使用JSP,我会检查...

if ( login.equals("admin") && password.equals("guess") ) {
        // Valid login
        session.setAttribute("authorized", "yes");
} else {
        // Invalid login
        session.setAttribute("authorized", "no");
}

但是,如果会话可以访问一组servlet,我如何在SpringMVC中全局设置我的应用程序?我可以设置很好的会话,但是在SpringMVC中,我的会话处理应该在控制器或servlet-context.xml(甚至是web.xml)完成,所以我可以检查一下“如果用户已登录则显示此页面,否则主页“。

我的login.jsp非常简单......

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="true" %>
<html>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<head>
    <title>Login</title>
</head>
<body>
<h1>
    Hello please login to this application  
</h1>
<script>

        function login(){
            var username = $("#username").val();
            var password = $("#password").val();

            $.post('login', { username : username , password : password }, function(data) {
                $('#results').html(data).hide().slideDown('slow');
            } );
        }

</script>
Username : <input id="username" type="text" />
Password : <input id="password" type="password" />
<input name="send" type="submit" value="Click me" onclick="login()" />
<form name="next" action="auth/details" method="get">
    <input name="send" type="submit" value="Go Through"/>
</form>
<div id="results" />
</body>
</html>

如果用户已登录,我只希望auth / details中的控制器返回详细信息,最佳方法是什么?饼干/会话等?

谢谢,

大卫

3 个答案:

答案 0 :(得分:2)

看起来像重新发明轮子。 Spring Security已经处理了你的情况,在web.xml(定义一个servlet过滤器)中只有几行XML,并且它将限制对所选URL的访问,提供登录/注销屏幕,处理用户存储和HTTP的一些基本配置。会话管理。

虽然已知非常复杂,但默认配置(auto)足以启动:

<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_USER" />
</http>

请参阅tutorial。此外Apache Shiro似乎也得到了很多关注。

如果由于某种原因,您不想将Spring Security引入堆栈,那么Spring MVC interceptors是实现跨领域安全逻辑的好地方。您可以访问原始请求和响应,因此您可以发现URL并检查HTTP会话。

答案 1 :(得分:0)

如果您没有使用弹簧安全保护,我建议您查阅并使用它。使用spring security来做这样的事情要容易得多:

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-minimal

使用:intercept-url

答案 2 :(得分:0)

看看Spring Security JSP Taglib。配置完成后,您可以执行

之类的操作
<sec:authorize access="hasRole('user')">
    Only logged in users will see this.
</sec:authorize>