我正在尝试创建一个应用程序,该应用程序仅允许用户在未登录时访问登录页面,而无法访问其他任何内容(减去资源)。一旦他们登录,我希望他们在注销之前无法访问登录页面,并且可以访问所有其他页面。现在,当我已经登录时,我的服务会记住我,但它仍然会让我访问登录页面。当我尝试在登录控制器上识别用户时,身份验证始终为空。
注意,我正在使用:Spring MVC 3 Hibernate 4 Groovy 2.1
这是我的登录控制器:
@RequestMapping(method = RequestMethod.GET)
String login(Model model, @RequestParam(value="account", required=false) String account, @RequestParam(value="uuid", required=false) String uuid, @RequestParam(value="message", required=false) String message) {
addStatusAttribute(model, account, uuid, message)
model.addAttribute("newUser", new User())
Authentication auth = SecurityContextHolder.context.authentication
if (auth != null) {
logger.info(auth.name)
}
else {
logger.info(auth) // Always hits here
}
if (!(auth instanceof AnonymousAuthenticationToken) && auth != null) {
"forward:/home"
}
else {
"login"
}
这是我的安全配置:
<http auto-config="true">
<intercept-url pattern ="/login**" filters="none"/>
<intercept-url pattern="/static/**" filters="none" />
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page="/login" default-target-url="/home"
authentication-failure-url="/login?error=true"
always-use-default-target="true" />
<logout logout-success-url="/login" />
<remember-me data-source-ref="dataSource"
user-service-ref="myUserDetailsManager"
token-validity-seconds="864000"
key="skyfury_key"/>
</http>
我认为这没有任何问题,但这是我的 JSP 表单:
<form method="POST" action="<c:url value="/j_spring_security_check" />">
<input type="text" name="j_username" placeholder="Email" />
<input type="password" name="j_password" placeholder="Password" />
<label for="j_remember">Remember Me</label>
<input id="j_remember" type='checkbox' name='_spring_security_remember_me' value="on" />
<input type="submit" value="Login" />
</form>
如果可以的话请帮忙!我已经盯着这个太久了!!谢谢 :)