我已经在网上搜索了一个解决方案,但我无法解决这个问题。
我在Maven中使用Spring Boot并拥有 我的pom.xml文件中的spring-boot-starter-thymeleaf依赖。
我尝试使用Thymeleaf显示退出按钮,仅在用户登录时才显示,但此代码似乎无效:
<div th:if="${#authorization.expression('isAuthenticated()')}">
<div class="navbar-form navbar-right">
<a href="/logout">
<button type="text" class="btn btn-primary navbar-right">Logout</button>
</a>
</div>
</div>
它一直显示此错误:
There was an unexpected error (type=Internal Server Error, status=500).
Exception evaluating SpringEL expression: "#authorization.expression('isAuthenticated()')"
和我有#34的行号;如果&#34;与百里叶病的情况。
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用sec:authorize="isAuthenticated()"
,但您可能必须为此添加依赖项等。我用过:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>2.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
此外,请确保添加SpringSecurityDialect
以便isAuthenticated和Spring可以评估其他类似的表达式。例如:
Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
engine.addDialect(new SpringSecurityDialect());
return engine;
}
在html页面本身,将以下内容添加到<html>
代码中,以确保识别出sec:
代码:
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"
答案 1 :(得分:0)
这可能是非正统的。随意给你建设性的批评。你可以使用Principal在你的控制器中设置一个变量,然后在你的百万富翁中设置一个if / else up在你的标题/导航栏中。
<?php
namespace app\controllers\common;
use Yii;
use yii\web\Controller;
class HomeCommonController extends Controller {
public function actionIndex()
{
echo "From the Common Home";
}
}
导航栏中的:
http://localhost/yiitest/home
登录:
@RequestMapping(value = "/mypage", method = RequestMethod.GET)
public String mypagemethod(Principal prin, Model model)
{
if(prin == null)
{
model.addAttribute("currentuser", "noBodyHome");
}
else
{
model.addAttribute("currentuser", prin.getName());
}
return "mypage";
}