如何在Spring Security的servlet中将JSP(自定义标记)转换为Code?

时间:2009-11-02 06:30:10

标签: jsp servlets spring-security

我正在开展一个项目,我必须在JSP中添加一些代码。 此JSP的代码如下(与Spring Security相关)...

<%@ taglib prefix='c' uri='http://java.sun.com/jstl/core_rt' %>
<%@ page import="org.springframework.security.ui.AbstractProcessingFilter" %>
<%@ page import="org.springframework.security.ui.webapp.AuthenticationProcessingFilter" %>
<%@ page import="org.springframework.security.AuthenticationException" %>
....
<c:if test="${not empty param.login_error}">
      <font color="red">
        Your login attempt was not successful, try again.<br/><br/>
        Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
      </font>
</c:if>
....
<c:if test="${not empty param.login_error}"><c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>
...

这是我试图在我的servlet中检查的内容:

enumr = request.getAttributeNames();
while(enumr.hasMoreElements())
{
    String element = enumr.nextElement()+"";
    out.print("<h3>Read an element:");
    out.print(element+" » ");
    out.print(request.getAttribute(element));
    out.print("</h3>");
}

和相应的输出:

Read an element:__spring_security_session_fixation_filter_applied » true
Read an element:__spring_security_filterSecurityInterceptor_filterApplied » true
Read an element:hibernateFilter.FILTERED » true
Read an element:__spring_security_session_integration_filter_applied » true
Read an element:requestContextFilter.FILTERED » true

一个有根据的猜测是,我可以在阅读时得出错误, 的 _spring_security_filterSecurityInterceptor_filterApplied 下, 描述发生了错误。


如何阅读错误消息?

2 个答案:

答案 0 :(得分:1)

首先:你没有使用Facelets。您正在使用JSP。这两个都是来自Sun的独立视图技术,其中Facelets在类固醇上被视为JSP。因此,使用Facelets错误地标记了此主题。

其次:HTML&lt; font&gt;自1998年HTML 4.01以来,不推荐使用tag。您应该使用CSS。

回到你的问题:我不做Spring,所以我不能深入细节,但是你有没有检查过会议范围的属性?快速搜索关键字“SPRING_SECURITY_LAST_EXCEPTION.message”了解到它存储在会话范围内。

答案 1 :(得分:0)

有效:

String keyToSearch = AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY;
Object value = request.getSession().getAttribute(keyToSearch);

再次感谢BalusC