2012-01-18 58 views
1

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

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

但我怎么在全球范围内我用SpringMVC中的应用程序设置,如果组servlet可以通过会话访问?我可以设置会话没问题,但在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 /细节控制器有返回的详细信息,如果用户已经登录,什么是这个最好的方法?饼干/会议等?

感谢,

大卫

回答

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会话。

0

看一看的Spring Security JSP Taglib。一旦配置,它可以让你做的事情,如

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