gpt4 book ai didi

java - 为什么在装饰器中调用安全认证属性 `principal.displayName`会抛出异常?

转载 作者:行者123 更新时间:2023-12-03 02:41:37 24 4
gpt4 key购买 nike

在装饰器中调用安全身份验证属性 principal.displayName 是否会导致问题?

我将其设置为 sitemesh 装饰器中的变量:

                <c:set var="displayName">
<sec:authentication property="principal.displayName" />
</c:set>

但它会生成此异常:

java.lang.RuntimeException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Invalid property 'principal.displayName' o
f bean class [org.springframework.security.authentication.AnonymousAuthenticationToken]: Bean property 'principal.displayName' is not
readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at com.opensymphony.sitemesh.webapp.decorator.BaseWebAppDecorator.render(BaseWebAppDecorator.java:39)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:84)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)

最佳答案

此时您请求的 Authentication 对象是 AnonymousAuthenticationToken 的实例类,并且该类没有名为 displayName 的属性。

显然,SpringSecurity 认为用户没有登录。您可能需要

  • 更改访问规则,使该 JSP 仅在用户登录时才能查看,或者

  • 将 JSP 更改为如下所示(假设您使用的是 Spring 3.0.x 并且已启用 Web 安全表达式)。

<小时/>
<c:set var="displayName">
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal.displayName" />
</sec:authorize>
</c:set>

引用文献:

关于java - 为什么在装饰器中调用安全认证属性 `principal.displayName`会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com