java - 仅向已登录用户显示注销按钮

时间:2016-05-21 17:21:59

标签: java spring maven thymeleaf

我已经在网上搜索了一个解决方案,但我无法解决这个问题。

我在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;与百里叶病的情况。

我该如何解决这个问题?

2 个答案:

答案 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";
}