我的项目遇到一个奇怪的问题(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问题。
谢谢你对此的任何建议。
答案 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>
工作完成了。