我已经构建了一个工作正常的简单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中的控制器返回详细信息,最佳方法是什么?饼干/会话等?
谢谢,
大卫
答案 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来做这样的事情要容易得多:
使用:intercept-url
答案 2 :(得分:0)
看看Spring Security JSP Taglib。配置完成后,您可以执行
之类的操作<sec:authorize access="hasRole('user')">
Only logged in users will see this.
</sec:authorize>