当前位置: 首页 > 知识库问答 >
问题:

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

冉俊德
2023-03-14

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

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

@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 中注册的任何视图控制器。相反,我需要确保我的每个控制器都是独立的类。

那么,有人可以向我指出一种自动将登录用户详细信息插入到我的视图中的方法,例如,在此示例中.html某些已登录的页面?谢谢

共有3个答案

薛扬
2023-03-14

使用Spring boot 2.2.1时。

对于专家,请将这些线条添加到 pom 中.xml

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

在百里香里

<span th:text="${#authentication.getPrincipal().getUsername()}"></span>
<span th:text="${#authentication.getPrincipal().authorities}"></span>
孔扬
2023-03-14

使用Spring安全4和百里叶3时:

<span th:text="${#authentication.getPrincipal().getUsername()}"></span>
逑何平
2023-03-14

多亏了巴拉吉·克里希南的暗示,实现这一点很容易。

基本上,我必须将Thymeleaf Spring Security集成模块添加到我的构建中。渐变文件如下:

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

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

<span th:text ="${#authentication.getPrincipal().getUser().getFirstName()}"></span>
 类似资料:
  • 问题 如何在页面中心显示用户登录? 详细信息 左侧显示用户登录数据 实际上,我需要在页面中心显示用户登录数据。 这包括用户名和密码的标签以及复选框和标签记住 用户名和密码的用户登录标题和按钮提交和输入框 意思是全部移到中间。

  • 目前,我正在使用以下内容将用户登录到我的应用程序中。然而,我想使用一个角函数来实际执行登录。为此,我想创建一个Rest网络服务来进行身份验证,但是我在SO上看到的所有示例都使用我认为被贬低的用户。我还希望该服务返回有关用户的信息。 我要问的是如何将MyUserDetailsService更改为用作登录的restful服务,或者如何创建一个可用于登录的服务,该服务将在登录后返回用户对象。 这是我的a

  • 接口说明 获取当前登录用户的信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /usercenter/api/userinfo/v1.0.0/getLoginUserInfo 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应字段说明 参

  • 接口说明 获取当前登录用户的信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /usercenter/api/userinfo/v1.0

  • sp_get_current_user() 功能: 获取当前登录用户信息,包括users表里详细信息; 参数: 无 返回: 数组,用户包括users表里详细信息

  • 问题内容: 我正在使用https://github.com/kataras/iris Go网络框架。我有: 用户注册 用户已验证并登录 创建会话并使用用户键(表和结构)进行设置 现在,这是我用于登录用户的代码: 在authcheck中间件中 我的会议功能 现在,我的问题是,如何将“已记录的用户”值共享给模板中的所有路由。我当前的选项是: 但是上述代码的问题是,我将不得不为每个路由编写会话,然后为我