java – 如何在所有模板中显示当前登录用户的信息,包括Spring Security应用程序中由WebMvcConfigurerAdapter管理的视图

我有一个使用Spring Security和Thymeleaf模板的Spring Boot应用程序.当控制器由WebConfigurerAdapter的子类管理时,我试图在模板中显示登录用户的名字和姓氏.

所以,假设我的WebConfigurerAdapter子类看起来像这样

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter{

    @Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/some-logged-in-page").setViewName("some-logged-in-page");
        registry.addViewController("/login").setViewName("login");

    }
    ....
}

我的用户实体类看起来像这样

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    private Long id;



    @Column(name="first_name", nullable = false)
    private String firstName;


    public String getFirstName() {
        return firstName;
    }
    ...
}

在我的模板中,我尝试使用类似的代码

<div sec:authentication="firstName"></div> 

但它没有用.

我知道可以使用ControllerAdvise,如下所示:

@ControllerAdvice
public class CurrentUserControllerAdvice {
    @ModelAttribute("currentUser")
    public UserDetails getCurrentUser(Authentication authentication) {
        return (authentication == null) ? null : (UserDetails) authentication.getPrincipal();
    }
}

然后使用以下代码访问模板中的详细信息:

<span th:text ="${currentUser.getUser().getFirstName()}"></span>

但这不适用于在我的班级MvcConfig中注册的任何视图控制器.相反,我需要确保每个控制器都是单独的类.

那么,有人可以指出我自动将登录用户详细信息插入我的视图的方法,例如在这个例子中,some-logged-in-page.html?谢谢

最佳答案
由于Balaji Krishnan的暗示,这很容易实现.

基本上,我必须将Thymeleaf Spring Security集成模块添加到我的build.gradle文件中,如下所示:

compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity3")

然后在我的模板中我使用了以下标记:

<span th:text ="${#authentication.getPrincipal().getUser().getFirstName()}"></span>

转载注明原文:java – 如何在所有模板中显示当前登录用户的信息,包括Spring Security应用程序中由WebMvcConfigurerAdapter管理的视图 - 代码日志