_csrf始终为NULL,isAnonymous()始终为FALSE(部署后)

时间:2018-10-14 16:37:59

标签: spring-boot spring-security

我的项目遇到一个奇怪的问题(Spring 5.0.8,Spring Boot 2.0.5)。当我在Eclipse env中本地运行它时,它可以完美运行。 “ it”是指表达式

<security:authorize access="isAnonymous()">
    <li class="navbar-item"><a href="/signin">
        <spring:message code="menu.signin" />
    </a></li>
</security:authorize>
评估

很好,只要用户未登录,他/她就是匿名用户。此代码已在我们的应用程序中放置了6个月,并且运行良好。

当我对日志记录机制进行了很​​多更改,并开始将项目的一部分切换到Thymeleaf(一切正常时),我终于用Maven构建了一个新的WAR,并将其部署到EBS。

现在,看来不仅

<security:authorize ...> 

_csrf-Tags不再起作用,它们使用

进行评估
<meta th:name="_csrf" th:content="${_csrf.token}" />
<meta th:name="_csrf_header" th:content="${_csrf.headerName}" />

无法评估(仅在EBS环境中-本地一切正常)。

我开始在日志中跟踪问题,发现上面的表达式导致异常

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'token' cannot be found on null

当_csrf为空时,这可能很明显。

问题:有人遇到过类似的问题吗?我在这里没有期待我的问题的答案,但是我想知道为什么一切都可以在我的本地设置上完美运行,而当在EBS上发布时不再运行?

我的配置(基于注释)是否可能存在问题,并且发布时无法评估Spring中的变量/ bean?

由于上面的JSP示例不起作用(Thymeleaf代码也无法正常工作),我希望这是Spring后端问题,而不是Thymeleaf问题。

谢谢你对此的任何建议。

1 个答案:

答案 0 :(得分:0)

通常,在将问题发布到Stackoverflow之后,我发现了应用程序行为不稳定的原因。我在另一个@Controller类中声明了@EnableAutoConfiguration,这可能会引起一些混乱。删除声明后,一切都将正常运行。

实际上,我(再次)弄清楚了该行为的原因是什么。消除了第二个EnableAutoConfiguration并构建了WAR(应用程序内部仍然有一些JSP)之后,一切工作正常。然后,我进行了一些修复,重新部署了WAR,问题再次出现。

finding some indication之后,随附的spring-boot-starter-tomcat可能会干扰部署,请添加

<dependencies>
..
..
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

工作完成了。