首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sec:授权和sec:身份验证注释不起作用

sec:授权和sec:身份验证注释不起作用
EN

Stack Overflow用户
提问于 2013-08-19 08:54:53
回答 4查看 25.9K关注 0票数 20

我有一个Spring + Thymeleaf项目,其视图代码如下。

代码语言:javascript
复制
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring3-3.dtd">
<html
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:th="http://www.thymeleaf.org"
        xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

<head>
    <title>Contacts</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="content">
    <h1>Welcome to the site!</h1>
    <p th:if="${loginError}">Wrong user or password</p>
    <form th:action="@{/j_spring_security_check}" method="post">
        <label for="j_username">Email address</label>:
        <input type="text" id="j_username" name="j_username"/> <br/>
        <label for="j_password">Password</label>:
        <input type="password" id="j_password" name="j_password"/> <br/>
        <input type="submit" value="Log in"/>
    </form>
</div>

<div sec:authorize="isAuthenticated()">
    User: <span sec:authentication="name">miquel</span>
</div>
</body>
</html>

sec:authorize和sec:身份验证属性不像预期的那样工作-- div总是显示出来的,即使没有用户登录,而且span总是读"miquel“。

下面是我的控制器类的相关片段。

代码语言:javascript
复制
@RequestMapping(value = "/welcome.html") 
public String wellcome() { 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    System.out.println("username: " + auth.getName()); 

    return "home"; 
}

println语句按预期工作--如果没有用户登录,它会打印"anonymousUser",否则将打印用户名。

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-19 19:15:27

在将我的应用程序与Thymeleaf & Spring安全演示应用程序进行了比较之后,我发现了错误的来源。

显然,为了让Thymeleaf处理sec:authorizesec:authentication属性,需要将SpringSecurityDialect注册为模板引擎bean的另一种方言。

代码语言:javascript
复制
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver" />
    <property name="additionalDialects">
        <set>
            <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect" />
        </set>
    </property>
</bean>

这是令人惊讶的,因为在相关的Thymeleaf文档页面上没有提到这个事实。我希望这能帮助将来面对同样问题的其他人。

票数 28
EN

Stack Overflow用户

发布于 2016-07-18 08:23:10

在Spring中,我只需添加以下依赖项:

代码语言:javascript
复制
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    </dependency>
票数 16
EN

Stack Overflow用户

发布于 2015-09-08 12:34:01

对于java配置版本,通过添加spring安全方言,它也适用于我:

代码语言:javascript
复制
 @Bean
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.addDialect(new TilesDialect());
    templateEngine.addDialect(new SpringSecurityDialect());
    return templateEngine;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18309864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档