首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Cognito中使用Spring Security获取自定义属性

,可以通过以下步骤实现:

  1. 首先,确保已经在Cognito用户池中创建了自定义属性。可以在Cognito控制台的“用户池设置”中进行配置。例如,可以创建一个名为“customAttribute”的自定义属性。
  2. 在Spring Boot项目中,添加Spring Security和AWS SDK的依赖。可以在项目的pom.xml文件中添加以下依赖:
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>cognitoidentityprovider</artifactId>
</dependency>
  1. 创建一个自定义的CognitoUserService类,实现UserDetailsService接口。这个类将用于从Cognito中获取用户信息。
代码语言:txt
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminGetUserRequest;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminGetUserResponse;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AttributeType;

@Service
public class CognitoUserService implements UserDetailsService {

    @Autowired
    private CognitoIdentityProviderClient cognitoClient;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        AdminGetUserRequest request = AdminGetUserRequest.builder()
                .userPoolId("your-user-pool-id")
                .username(username)
                .build();

        AdminGetUserResponse response = cognitoClient.adminGetUser(request);

        // 获取自定义属性
        List<AttributeType> attributes = response.userAttributes();
        for (AttributeType attribute : attributes) {
            if (attribute.name().equals("customAttribute")) {
                // 在这里可以获取自定义属性的值,并进行相应的处理
                String customAttributeValue = attribute.value();
                // ...
            }
        }

        // 返回UserDetails对象,可以根据需要进行自定义
        return new CustomUserDetails(response.username(), response.enabled(), response.userStatus());
    }
}
  1. 在Spring Security配置类中,将自定义的CognitoUserService注册为UserDetailsService。
代码语言:txt
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .and()
                .logout().logoutSuccessUrl("/");
    }
}
  1. 在控制器中,可以通过注入Authentication对象来获取用户的自定义属性。
代码语言:txt
复制
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user/profile")
    public String getUserProfile(Authentication authentication) {
        // 获取自定义属性
        String customAttributeValue = authentication.getPrincipal().getCustomAttributeValue();
        // ...

        return "User Profile";
    }
}

这样,就可以在Cognito中使用Spring Security获取自定义属性了。在Cognito用户池中创建自定义属性后,通过CognitoUserService类从Cognito中获取用户信息,并在控制器中使用Authentication对象获取自定义属性。根据实际需求,可以进一步处理自定义属性的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Security Spring Boot 使用【集中式】

1.1.2 引入 Spring Security    Spring Boot 引入 Spring Security 是相当简单的,可以在用脚手架创建项目的时候勾选,也可以创建完毕后 pom 文件中加入相关依赖...Spring Boot 帮我们完成了 Spring 需要完成的诸多配置【☞ Spring Security 基础入门】。...也正是因为 Spring Boot 提供了自动化配置方案,让我们可以“零配置”的使用 Spring Security,所以 Spring Boot 项目中我们通常使用的安全框架是 Spring Security...1.2 配置认证 1.2.1 添加静态用户   Spring Boot 除了一些信息写道 yml 配置文件,其他配置都使用配置类,Spring Security 需要继承 WebSecurityConfigurerAdapter...Security使用的用户是 UserDetails,我们要么让自定义用户类实现 UserDetails,要么使用时将自定义用户类转换为 UserDetails。

2.5K41

Springmvc获取properties属性

一些关键的属性一般都会拿出来作为配置,比如数据库连接等。springmvc也提供了获取property的类,比如@Value来获取。...我接触spring很浅,基本上都是百度的问题解决方法,百度到@value的用法,按照说明尝试了两次都失败了。正巧身边又有合适的方法,于是便没有去深入研究为什么失败,这个留在以后研究。...下面就是获取代码: 源码来自:https://github.com/thinkgem/jeesite 1 package com.demo.common.utils; 2 3 import...可载入多个properties文件, 相同的属性最后载入的文件的值将会覆盖之前的值,但以System的Property优先. 17 * Created by Administrator on 2016...Boolean.valueOf(value) : defaultValue; 122 } 123 124 125 126 /** 127 * 载入多个文件,文件路径使用spring

3.3K90

Spring Security 5如何使用默认的Password Encoder

概览 Spring Security 4,可以使用in-memory认证模式直接将密码以纯文本的形式存储。...Spring Security 5,密码管理机制进行了一次大的修改,默认引入了更安全的加/解密机制。...这意味着,如果您的Spring应用程序使用纯文本的方式存储密码,升级到Spring Security 5后可能会出现问题。 在这个简短的教程,我们将描述其中一个潜在的问题,并演示如何解决。 2....如果我们Spring Security 5使用相同的配置,将会报错: java.lang.IllegalArgumentException: There is no PasswordEncoder mapped...总结 在这个简短的例子,我们使用新的密码存储机制将一个Spring 4下的,使用了in-memory 认证模式的配置升级到了Spring 5。 与往常一样,您可以GitHub上查看源代码。

1.3K10

Spring Security - 02 从 SecurityContextHolder 获取用户信息

@toc 环境 操作系统: Windows 10 x64 集成开发环境: Spring Tool Suite 4 Version: 4.12.1.RELEASE Build Id: 202110260750...浏览器(客户端): Google Chrome 版本 97.0.4692.71(正式版本) (64 位) 项目结构 参考:Spring Security - 01 新建项目 [在这里插入图片描述]...新建 HelloController 控制器类,我们可以通过 SecurityContextHolder 获取用户信息(第 17 ~ 19 行): package com.mk.controller;...import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext...Security 会先要求我们登录,登录成功之后就可以看到服务器返回用户的信息: [在这里插入图片描述] 参考 Spring Security - 01 新建项目 Spring Security /

1.9K20

Spring Security入门到实践(一)HTTP BasicSpring Security的应用原理浅析

Spring Security的前身是Acegi Security,后来成为了Spring安全领域的顶级项目,并正式更名到Spring名下,成为Spring全家桶的一员,所以Spring Security...学习Spring Security不仅仅是要学会如何使用,也要通过其设计精良的源码来进行深入地学习,学习它在认证与授权方面的设计思想,因为这些思想是可以脱离具体语言,应用到其他应用。...HTTP Basic的认证方式企业级开发很少使用,但也常见于一些中间件,比如ActiveMQ的管理页面,Tomcat的管理页面等,都采用的HTTP Basic认证。...四、HTTP Basic认证Spring Security的应用 Spring Security没有经过任何配置的情况下,默认也支持了HTTP Basic认证,整个Spring Security的基本原理就是一个拦截器链...如果我们创建的Filter没有预先设置的Map集合,那么就会抛出一个IllegalArgumentException异常,并提示我们使用addFilterBefore或者addFilterAfter

1.6K31

ASP.NET获取文件属性

www.chinacs.net  2001-8-13  中文C#技术站在ASP.NET获取文件属C#...获取文件属性(Retrieving File Information In ASP.NET) By Steven Smith 使用ASP.NET我们可以很容易的得到文件的相关信息,包括:文件名、路径...如果我们使用典型的ASP来获取文件信息,它必须使用.FileSystemObjiect脚本对象来查询文件的有关信息。...但在ASP.NET,.FileSystemObject被System.IO 名称空间取代了,.System.IO,它包含了很多获取文件系统信息的类。...通过以上操作,FileInfo类的所有公共属性就可被我们操作了,主要包括以下属性: 创建日期,路径,扩展名,全名,最后访问时间,修改时间,大小(bytes),文件名 这样,我们就可以把文件的属性赋给

2.9K40

Spring Security ,我就想从子线程获取用户登录信息,怎么办?

大家知道 Spring Security 想要获取登录用户信息,不能在子线程获取,只能在当前线程获取,其中一个重要的原因就是 SecurityContextHolder 默认将用户信息保存在 ThreadLocal...这个问题搞懂了,就理解了为什么 Spring Security ,只要我们稍加配置,就可以子线程获取到当前登录用户信息。...InheritableThreadLocal,即使子线程也能获取到父线程 ThreadLocal 的数据。...对象,获取的时候需要传入当前线程,看到这里大家可能就猜出来几分了,数据存储一个类似于 Map 的 ThreadLocalMap ,ThreadLocalMap 又和线程关联起来,怪不得每个线程只能获取到自己的数据...修改完成后,再次启动项目,就可以子线程获取到登录用户数据了,至于原理,就是前面所讲的。

4.4K30

Spring Security Spring Boot 中使用 OAuth2【分布式】

Spring-Security-OAuth2 是对 OAuth2 的一种实现,并且跟 Spring Security 相辅相成,与 Spring Cloud 体系的集成也非常便利,最终使用它实现分布式认证授权解决方案...实际应用,该值一般是由服务端处理的,不需要客户端自定义 refresh_token_validity 设定客户端的 refresh_token 的有效时间值(单位:秒),可选,若不设定值则使用默认的有效时间值...实际应用,该值一般是由服务端处理的,不需要客户端自定义 additional_information 这是一个预留的字段, Oauth 的流程没有实际的使用,可选,但若设置值,必须是 JSON...security) throws Exception { // tokenkey 这个 endpoint 当使用用 JwtToken 且使用非对称加密时,资源服务用于获取公钥而开放的,此时指...其他的拓展属性例如 tokenExtractor 令牌提取器用来提取请求的令牌,HttpSecurity 配置与 Spring Security 类似。

6.9K41

data自定义属性jQuery的用法

(1)如果在HTML文档设置的data-自定义属性的单个字符串的名称的属性若有大写值,js文件获取时只能用小写的形式获取。...如: HTMLdata-Role,获取当时为$(node).data(“role”); (2)如果在HTML设置data-role和data-Role是一样的,html属性不区分大小写。...然后我们从验证结果可以看出,js只会找到第一个与其匹配就直接返回。 (3)如果用js来设置data属性,那么如果你定义的是大写的格式,则访问也必须是大写的形式。...最后讲一下data()和attr()的区别: (1) 是否需要传参: data() 可以不传入参数,这使获得的是一个js对象,就算你html没有设置任何data自定义属性时,获得的也是一个对象。...(4)data-attribute属性会在页面初始化的时候放到jQuery对象,被缓存起来,而attr方法却不会。

2.9K20

Spring代码获取Bean的方式

方法一:初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport...获取springbean的方式总结: 方法一:初始化时保存ApplicationContext对象 ApplicationContext ac = new FileSystemXmlApplicationContext...然后通过它获取须要的类实例。上面两个工具方式的差别是,前者获取失败时抛出异常。后者返回null。...能够方便的获取ApplicationContext。 Spring初始化时。...提供的后三种方法能够实如今普通的类中继承或实现对应的类或接口来获取spring 的ApplicationContext对象,可是使用是一定要注意实现了这些类或接口的普通java类一定要在Spring

2.1K10

Spring代码获取bean的几种方式

"); ac.getBean("userService"); //比如:application.xml配置: <bean id="userService" class="com.cloud.service.impl.UserServiceImpl...然后<em>在</em>通过它<em>获取</em>须要的类实例。上面两个工具方式的差别是,前者<em>在</em><em>获取</em>失败时抛出异常。后者返回null。...<em>Spring</em>初始化时,扫描到该类,就会通过该方法将ApplicationContext对象注入。然后<em>在</em>代码中就可以<em>获取</em><em>spring</em>容器bean了。...ApplicationObjectSupport @Service public class SpringContextHelper2 extends ApplicationObjectSupport { //提供一个接口,<em>获取</em>容器<em>中</em>的...); } } 继承类的方式,是调用父类的getApplicationContext()方法,<em>获取</em><em>Spring</em>容器对象。

4K10

【实战技巧】CSS自定义属性以及VUE3使用

---- 什么是css自定义属性 官方称之为 自定义属性 ,但我比较习惯叫它 变量 ,简单点说就是一种开发者可以自主命名和使用的 CSS 属性. CSS变量和预处理器的变量有什么不同?...我们可以 样式表 内联样式 SVG的标签 中直接使用CSS变量,甚至可以 运行时 用JavaScript直接修改它。但是我们是 无法 对预处理器的变量做上面这些操作的....当然,可以同时使用CSS变量和预处理变量,他们是不冲突的. CSS变量:语法 变量的声明 css变量的定义由--开头,这样浏览器能够区分 自定义属性 和 原生属性 ,从而将它俩分开处理。...style属性使用 <!...VUE3.0,可以CSS中使用 响应式变量, 通过下图可以看出,它的原理就是运用了CSS自定义属性 我们先在HelloWorld.vue写入下方代码,我们使用定时器两秒以后修改color的值,

2.5K20
领券