我目前正在开展一个项目,我们使用freemarker作为模板语言。 我没有使用defualt登录表单,而是创建了一个自定义控制器和一个与该控制器一起使用的自定义freemarker视图
代码:
@Controller
public class LoginController {
private static finaal String LOGIN = "components/security/login";
@RequestMapping("/security/login")
public String login(){
return LOGIN;
}
}
我的freemarker模板:
HTML代码:
<form action="${rc.contextPath}/j_spring_security_check" method="post">
<label for="username">Username</label><input type="text" id="username" name="j_username"><br/>
<label for="password">Password</label><input type="text" id="password" name="j_password"><br/>
<input type="submit" value="Login!">
</form>
我的applicationContext-security.xml
<http>
<logout/>
<intercept-url pattern="/*" access="ROLE_ADMIN, ROLE_GUEST"/>
<intercept-url pattern="/security/login" filters="none"/>
<form-login login-page="/security/login" />
</http>
登录就像一个魅力但是当用户输入错误的用户名或密码时,没有显示错误消息,我无法弄清楚如何做到这一点。你可以帮我解决这个问题。
答案 0 :(得分:6)
那些想知道我是怎么做的人的代码:
<#if Session.SPRING_SECURITY_LAST_EXCEPTION?? && Session.SPRING_SECURITY_LAST_EXCEPTION.message?has_content>
<@spring.message "login.bad.credentials"/>
</#if>
答案 1 :(得分:0)
您需要设置错误页面:
<http>
...
<form-login authentication-failure-url="/loginError.jsp" default-target-url="/start.jsp" />
...
</http>
在 loginError.jsp :
中...
Login error. Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
...