如何在Thymeleaf中访问Spring Security Principal数据?

92vpleto  于 2023-05-29  发布在  Spring
关注(0)|答案(1)|浏览(219)

在Thymeleaf模板中,我想访问Principal实现的属性。主体被按预期设置到Authentication对象中,并按如下方式组成:

public class ApplicationUser implements Principal {

    private Long userId;
    private String displayName;

    //...
}
public class ApplicationUserDetails extends ApplicationUser implements UserDetails {

    //...
}

在应用程序本身中,我可以请求Authentication对象,获取Principal,然后将主体转换为ApplicationUser,以获得所需的属性,如下所示:

String displayName = ((ApplicationUser) authentication.getPrincipal()).getDisplayName();

我现在的问题是,我如何从Thymeleaf模板中的身份验证对象中获取此数据以使用它。建立一个档案链接
我想得到下面的非工作链接的例子与displayName作为尾巴工作:

<a th:href="|/users/${#authentication?.principal.getDisplayName()}|">Profile</a>

我想避免的是将所需的数据添加到控制器中的每个视图中,因为我必须为每个端点这样做,因为概要链接位于头部。

感谢您的帮助

rjee0c15

rjee0c151#

我希望你做得很好!使用**#authentication对象**,但需要将其强制转换为相应的类以访问所需的属性。以下是如何修改链接示例以访问displayName属性(GENERATE PROFILE LINK):

<a th:href="@{'/users/' +(${#authentication.principal.displayName})}">Profile</a>

注:

确保在模板的开头有适当的Thymeleaf安全命名空间声明,以使用thIS OBJECT:

<html xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/extras/spring-security">

我希望它能起作用!!!

相关问题