我已在我的应用程序中集成了Spring Security,并希望在凭据错误的情况下向用户显示错误消息。 JSP:
<c:out value='${secerror}' /> //prints nothing on screen
<c:if test="${empty secerror}">
error is empty or null. //always prints this line on screen
</c:if>
<c:if test="${not empty secerror}">
<div class="errorblock">
Your login attempt was not successful, try again.<br /> Caused :
${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
</div>
</c:if>
<c:set var = "url" value = "/j_spring_security_check" />
<form:form method="post" commandName="portalLogin" action="${pageContext.servletContext.contextPath}${url}" name="f">
[更新]:对不起,我意识到我的模型对象在重定向到portalLogin.html之后被重写,因为我创建了一个先前创建的新模型对象。 但我尝试了几个简单的选项,通过它我可以将Model对象从一个控制器方法传递到同一个控制器中的另一个方法。但没有任何效果。
我在loginerror方法中尝试了以下代码。
return new ModelAndView("portalLogin","secerror","true");
上述代码出现以下错误:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'portalLogin' available as request attribute
我确实遇到了this链接,但我发现这是一个非常冗长的解决方案,并且不确定是否要编写那么多代码。
我不确定我是否可以将Model对象用于@ModelAttribute注释@ModelAttribute。
请向我提供我可以试用的代码片段/示例。
我的控制器方法是这样的:
@RequestMapping("/portalLogin")
public ModelAndView goToLogin(Model model) {
try {
System.out.println("Enter goToLogin************************");
} catch (Exception exception) {
}
return new ModelAndView("portalLogin", "portalLogin", new LoginModel());
//return new ModelAndView("portalLogin", model);
}
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public ModelAndView loginerror(ModelMap model) {
//model.addAttribute("secerror", "true");
//return "redirect:portalLogin.html";
return new ModelAndView("portalLogin","secerror","true");
}
[更新]:作为一种解决方法,我在loginerror方法中添加了goToLogin方法逻辑,因为我的唯一目的是获取portalLogin页面。错误按预期抛出。
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public ModelAndView loginerror(Model model) {
model.addAttribute("secerror", "true");
return new ModelAndView("portalLogin", "portalLogin", new LoginModel());
}
但我仍然想知道我是否可以通过某种方式将Model对象从一个控制器方法传递到同一个控制器中的另一个方法。
答案 0 :(得分:0)
让我们轻松一点,如果你想要显示一个错误的凭证信息,你可以简单地做这样的事情:
在spring-security.xml中:
<sec:form-login login-page="/login.jsp"
default-target-url="/default-url-when-login-correct"
authentication-failure-url="/login.jsp?error=true"
login-processing-url="/login" always-use-default-target="true" />
在你的login.jsp中:
<c:if test="${not empty param.error}">
<span>${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}</span>
</c:if>
答案 1 :(得分:0)
您也可以尝试这样的事情
<c:if test="${not empty secerror == 'true'}">
<tr>
<td colspan="2" align="center"><font style="color: red">Your login attempt was not successful, try again</font>
</td></tr></c:if>