ユーザーがログインしていない間はログインページにのみアクセスでき、他のもの(リソースを除く)にはアクセスできないアプリケーションを作成しようとしています。ログインしたら、ログアウトするまでログインページにアクセスできず、他のすべてのページにアクセスできないようにしたいと思います。現在、私のサービスは、私がすでにログインしているときに私を覚えていますが、それでもログイン ページにアクセスできます。ログイン コントローラーでユーザーを識別しようとすると、認証は常に null になります。
私が使用していることに注意してください: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>
できれば助けてください!私はこれをずっと見つめていました!! ありがとう :)