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

有没有办法在存储库中从Spring Security获取最新的userId?

在存储库中从Spring Security获取最新的userId的方法是通过使用Spring Security提供的SecurityContextHolder类来获取当前用户的身份信息。SecurityContextHolder是一个用于存储当前用户身份信息的上下文对象。

要获取最新的userId,可以按照以下步骤进行操作:

  1. 导入所需的依赖:
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 创建一个自定义的UserDetails实现类,该类用于存储用户的身份信息,包括userId等相关信息。
  2. 创建一个自定义的UserDetailsService实现类,该类用于从存储库中获取用户信息,并将其封装到UserDetails对象中。
  3. 在Spring Security的配置类中,通过重写configure方法来配置认证和授权规则,并将自定义的UserDetailsService实现类注入到AuthenticationManagerBuilder中。
  4. 在需要获取最新userId的地方,可以通过SecurityContextHolder获取当前用户的身份信息,然后从中提取出userId。

以下是一个示例代码:

代码语言:txt
复制
// 自定义UserDetails实现类
public class CustomUserDetails implements UserDetails {
    private Long userId;
    // 其他属性和方法省略
}

// 自定义UserDetailsService实现类
@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new CustomUserDetails(user.getId(), user.getUsername(), user.getPassword());
    }
}

// Spring Security配置类
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private CustomUserDetailsService 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/**").hasAnyRole("ADMIN", "USER")
            .and()
            .formLogin()
            .and()
            .logout().logoutSuccessUrl("/login");
    }
}

// 获取最新userId的方法
public Long getCurrentUserId() {
    CustomUserDetails userDetails = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    return userDetails.getUserId();
}

在上述示例中,我们通过自定义UserDetails和UserDetailsService实现类来获取用户信息,并在SecurityConfig中配置了认证和授权规则。在需要获取最新userId的地方,我们可以通过SecurityContextHolder获取当前用户的身份信息,并从中提取出userId。

请注意,上述示例中的代码仅为演示目的,实际应用中可能需要根据具体情况进行适当的修改和调整。

推荐的腾讯云相关产品:腾讯云云服务器(ECS)、腾讯云对象存储(COS)、腾讯云数据库(TencentDB)等。你可以通过访问腾讯云官方网站获取更详细的产品介绍和文档:https://cloud.tencent.com/

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

相关·内容

MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程

http://blog.csdn.net/qq_26525215/article/details/52143733 在上面链接的博客中,写了如何用MySQL语句定义和执行存储过程 Java执行存储过程:...Java演示执行带输入参数的存储过程: 构造 call 转义序列时,请使用 ?(问号)字符来指定 IN 参数。此字符充当要传递给该存储过程的参数值的占位符。...向 setter 方法传递值时,不仅需要指定要在参数中使用的实际值,还必须指定参数在存储过程中的序数位置。例如,如果存储过程包含单个 IN 参数,则其序数值为 1。...Java演示执行带输入输出参数的存储过程: 构造 call 转义序列时,请使用 ?(问号)字符来指定 OUT 参数。 此字符充当要从该存储过程返回的参数值的占位符。...cst.registerOutParameter(4, Types.INTEGER); cst.execute(); //获取输出的参数 int count

1.1K20

Spring Security---多次登录失败账户锁定详解

Spring Security---多次登录失败账户锁定 需求 知识回顾 MyUserDetails修改 实现多次登录失败锁定的原理 具体实现 重置数据库锁定状态的时机 需求 在实际的开发过程中,我们通常会有这样的一个需求...具体你是把这2个信息存储在mysql、还是文件中、还是redis中等等,完全取决于你对你所处的应用架构适用性的判断。具体的实现逻辑无非就是: 登陆失败之后,从存储中将nLock取出来加1。...或request.getSession中获取登录用户名 String userId = request.getParameter("uname"); //默认提示信息...,userId就是登陆用户名,你可以在request中取出来。...---- 重置数据库锁定状态的时机 需要注意的是,我们这种实现方式,实际上是有两个锁定状态 第一个锁定状态是由ratelimitj-inmemory控制的窗口,是存储在内存中的,锁定时间不到,这个窗口是打不开的

5.8K31
  • Spring Security 实战干货:SecurityContext相关的知识

    今天我们来讲一下如何在接口访问中检索当前认证用户信息。我们先讲一下具体的场景。通常我们在认证后访问需要认证的资源时需要获取当前认证用户的信息。比如 “查询我的个人信息”。...所以我们需要一个业务中可以检索当前认证用户的工具。接下来我们来看看 Spring Security 是如何解决这个痛点的。文末现金抽奖福利! 2....安全上下文 SecurityContext 不知道你有没有留意Spring Security 实战干货:使用 JWT 认证访问接口[4] 中是如何实现 JWT 认证拦截器 JwtAuthenticationFilter...总结 SecurityContext 是 Spring Security 中的一个非常重要类,今天不但介绍 SecurityContext 是什么、有什么作用,也对以前讲过的一些知识进行回顾。...最后也简单讲述了 SecurityContextHolder 三种存储 SecurityContext 的策略和使用场景 。希望对你学习 Spring Security 有帮助。还请多多关注。

    1.6K30

    Spring Security在前后端分离项目中的使用

    ① 在这个实现类中去查询数据库 校验: 1、定义Jwt认证过滤器 ① 获取token ② 解析token获取其中的userid ③ 从redis中获取用户信息 ④ 存入SecurityContextHolder...默认情况下调用的是 InMemoryUserDetailsManager中的方法,该UserDetailsService是从内存中获取用户的数据。...此时控制台会输出如下错误: 报错的原因:默认情况下Spring Security在获取到UserDetailsService返回的用户信息以后,会调用PasswordEncoder中的matches方法进行校验...② 配置加密算法 2.3.6 配置加密算法 一般情况下关于密码在数据库中都是密文存储的,在进行认证的时候都是基于密文进行校验。...具体的实现步骤: 1、使用指定的加密算法【BCrypt】对密码进行加密处理,将加密以后的密文存储到数据库中 2、在Spring容器中注入一个PasswordEncoder对象,一般情况下注入的就是:BCryptPasswordEncoder

    1.4K20

    Spring Security入门(三): 基于自定义数据库查询的认证实战

    0 引言 在笔者的上一篇文章中Spring Security入门(二):基于内存的认证一文中有提到过Spring Security实现自定义数据库查询需要你实现UserDetailsService接口...、加密密文及角色列表从数据库中查了3次。...Security入门(二) 基于内存存储的表单登录实战》的基础上对所有用户进入登录页面和登录接口放开权限,而对/index/*路径下的接口允许访问角色改为数据库中存在的Admin,SystemAdmin...,可以看出SecurityContextHolder类首先通过系统变量名spring.security.strategy从系统属性中获取strategyName,并在初始化方法中根据strategyName...[1] Spring Security 入门(一)Spring Security中的认证与密码编码器 [2] Spring Security入门(二) 基于内存存储的表单登录实战 [3] SpringBoot

    1.5K40

    Spring Security----RBAC权限控制模型,和权限相关知识点整理

    我们应该实现UserDetails与UserDetailsService接口,从而从数据库或者其他的存储上动态的加载这些信息。...get方法由Spring Security调用,获取认证及鉴权的数据 我们通过set方法或构造函数为 Spring Security提供UserDetails数据(从数据库查询)。...在我们的Spring Security配置类SecurityConfig中仍然有一部分内容是通过代码静态配置的,那就是:资源鉴权规则。 简单说“资源鉴权规则”就是:你有哪些权限?...---- 权限表达式使用方法总结 SPEL表达式权限控制 从spring security 3.0开始已经可以使用spring Expression表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限...Spring EL 提供返回对象能够在表达式语言中获取返回的对象returnObject。

    2.5K41

    SpringSecurity控制授权(鉴权)功能介绍

    1.spring security 过滤器链 ​ spring security中的除了用户登录校验相关的过滤器,最后还包含了鉴权功能的过滤器,还有匿名资源访问的过滤器链,相关的图解如下: ?...image 2.控制授权的相关类 ​ 这里是整个spring security的过滤器链中的授权流程中控制权限的类的相关图示: ?...image ​ 这里主要是从AccessDecisionVoter的投票者(译称)把信息传递给投票管理者AccessDecisionManager,最终来判断是过还是不过(也就是有没有权限).有两种可能的类...我们再来关注SecurityContextHolder这个类,他会将我们的权限信息封装到Authentication中,SecurityConfig则是相关的Spring security的配置信息,这个类会将相关的信息传递到...//根据查找到的用户信息判断用户是否被冻结 /** * 可以从数据库查出来用户名和密码进行比对,为了方便我这里就直接固定了 */ String

    80130

    Spring Security技术栈开发企业级认证与授权(十五)解决Spring Social集成QQ登录后的注册问题

    从上图的代码中可知,在认证过程中,打断点的那一步骤是拿到providerId和providerUserId(其实就是openId)去数据库表UserConnection中去查询业务系统中的userId,...我们的providerSignInUtils工具类是从Session中拿到的用户信息,那么这个信息是什么时候存储到session中的呢?...,注册是新生成标识,绑定是从数据库中获取唯一标识 // 那么我们就以用户传递过来名称作为唯一标识,将这个标识和session中的用户信息一同传输给Spring Social...// Spring Social拿到数据以后,就会将这个唯一标识和用户在QQ上的信息一同存储到UserConnection表中 String userId = user.getUsername...绑定是从数据库中获取唯一标识,那么我们就以用户传递过来名称作为唯一标识,将这个标识和session中的用户信息一同传输给Spring Social,Spring Social拿到数据以后,就会将这个唯一标识和用户在

    86910

    Spring Cloud实战|4.SpringCloud 整合security.实现认证中心

    UserDetailsService 通过实现该service,用来添加根据用户名 来获取用户信息的逻辑,可以从数据库获取,也可以从其他服务中获取用户信息 AuthorizationServerConfigurerAdapter...service 目前只是写死的用户信息,后面会通过feign从管理端服务获取用户信息,暂时只是为了服务能跑通 package com.ams.auth.security.details.user;...DaoAuthenticationProvider 设置用户名密码验证提供者中的用户获取来源sysUserDetailsService package com.ams.auth.security.config...clientDetailsService 设置默认的token存储方式(后面改成redis存储) 添加token增强器(在token中添加用户信息) 添加token 加密方式 package com.ams.auth.security.config...创建获取token 入口 为了能够捕获在认证过程中出现的所有异常,这里通过复写security中的token入口,来实现此目的 内容其实少,就是手动去调用tokenPoint的方法触发 package

    78511

    重学SpringCloud系列八之微服务网关安全认证-JWT篇

    Spring Security基础 系统内的其他业务服务在收到转发请求的时候,根据用户的身份信息判断决定该用户可以访问哪些接口。该如何实现?...spring-security-crypto是Spring 框架下进行加密解密、加签解签操作的常用类库 二、核心Controller 2个核心函数: authentication实现登录认证,认证成功之后返回...对于JWT合法的情况,从JWT中解析出userId(用户身份信息),并放入HTTP header中。(网关后面的服务会用到,下一节) 请结合上面的注释理解全局JWT鉴权的实现。...只有令牌合法请求才会被转发到具体的业务服务。并且在过滤器中我们在JWT令牌中解析出userId(用户身份信息),并向网关后面的服务传递。...用户正在访问的接口在X列表中,表示该用户可以访问该接口,否则无权限。 数据库模型 我们可以用下图中的数据库设计模型,描述这样的关系。

    3.4K20

    SSM综合案例之SpringSecurity安全框架技术

    (查询是否对应权限,授权其实就是在认证之后请求需要权限的资源时,查询数据库在主体中保存对应权限数据) 这些概念是通用的,不是Spring Security特有的。...在Spring Security中,获取当前登录的用户的信息,一般情况是需要在这个接口上面进行 扩展,用来对接自己系统的用户,看源码可知 package org.springframework.security.core.userdetails...密码 跳转到了错误页面: 四、 用户登录问题分析 问题一:登录失败的问题 在数据库中是有jack这个用户的 为什么还是没办法登录,原因是在于我们的spring-security.xml配置文件中配置的问题...我们只需要在获取密码的前面加上"{noop}" 代表的是使用明文 此时就认证成功 问题二:数据库查询用户角色 在上面的代码中我们的用户角色是自己手动添加的,这不是通用的一种方式,用户的角色我们要从数据库中进行查询...,获取到对应的角色之后,其实还是不能登录,在users表中,有一个字段​​status​​,这个字段表示的用户是否可能,0表示可用 1表示不可用。

    17710

    springcloud(七):配置中心svn示例和refresh

    说明server端会自动读取最新提交的内容 客户端测试 客户端直接使用上一篇示例项目 spring-cloud-config-client来测试,配置基本不用变动。...启动项目后访问: http://localhost:8002/hello,返回:hello im dev update``说明已经正确的从server端获取到了参数。...Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。...我们再次来测试,首先访问 http://localhost:8002/hello,返回: hello im dev,我将库中的值修改为 hello im dev update。...每次手动刷新客户端也很麻烦,有没有什么办法只要提交代码就自动调用客户端来更新呢,github的webhook是一个好的办法。

    1.2K80

    Spring Boot Security 基本使用一

    目录 前言 Spring Boot Security 和Spring Secutrity的关系 简单的权限控制 进一步探究 准备工作 编写权限代码(解决三个问题) 第一个问题:框架是如何从数据库里拿到用户信息...认证”是认证主体的过程,通常是指可以在应用程序中执行操作的用户、设备或其它系统。”授权”是指是否允许已认证的主体执行某一项操作。...Spring Boot Security 和Spring Secutrity的关系 在Spring Security框架中,主要包含两个jar,即spring-security-web依赖和spring-security-config....例如需要能够创建用户和权限,要求程序能够从数据库中读取用户,完成认证和访问控制.就需要做一些适应性改造.在这个过程中,仅仅为了使用的话,把握几个核心问题,背后的原理可以日后探究....第一个问题:框架是如何从数据库里拿到用户信息? 第二个问题:框架是如何拿到用户访问的api所对应的角色的? 第三个问题:框架是如何判断登录用户的角色有没有权限访问这个api的呢?

    39820

    权限框架 | 学会Spring Security权限框架,就是这么简单

    认证处理机制如basic,cas等期望在执行时从SecurityContextHolder中获取SecurityContext HeaderWriterFilter 是一个向HttpServletResponse...中,供后续的程序进行调用 Authentication 对象不需要我们自己去创建,在与系统交互的过程中,Spring Security 会自动为我们创建相应的 Authentication 对象 ,然后赋值给当前的...获取当前用户的用户名是一种比较常见的需求,关于上述代码其实 Spring Security 在 Authentication 中的实现类中已经为我们做了相关实现,所以获取当前用户的用户名最简单的方式应当如下...将使用 ThreadLocal 来保存 SecurityContext ,这也就意味着在处于同一线程中的方法中我们可以从 ThreadLocal 中获取到当前的 SecurityContext,因为线程池的原因...这时我们可以实现自己的 UserDetails,在该实现类中我们可以定义一些获取用户其它信息的方法,这样将来我们就可以直接从当前 SecurityContext 的 Authentication 的 principal

    4.5K50

    Spring Gateway、Sa-Token、Nacos 认证鉴权方案,yyds!

    如果使用像Spring Security这样的框架,又要花好多时间学习,拿过来一用,好多配置项也不知道是干嘛用的,又不想了解。...要是不用Spring Security,token的生成、校验、刷新,权限的验证分配,又全要自己写,想想都头大。 Spring Security太重而且配置繁琐。...现在调用接口时传入的格式就是 weishuang-token = Bearer token123456 sa-token的session模式需要redis来存储session,在微服务中,各个服务的session...在gateway中也需要配置sa-token和redis,注意和在account服务中配置的要一致,否则在redis中获取信息的时候找不到。...、权限接口 在account中实现通过用户获取角色、获取权限的接口 RoleController、PermissionController @RestController @RequestMapping

    1.4K12

    Springboot之Security前后端分离登录

    什么是Spring Security Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。...与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求 官方网站:https://spring.io/projects/spring-security...#learn 初识Security 因为之前已经接触过其他的权限框架:shiro 所以很好入门 比较好的入门博文: Springboot + Spring Security 实现前后端分离登录认证及权限控制...Springboot集成SpringSecurity 附代码 关于SpringBoot应用中集成Spring Security你必须了解的那些事 Spring Boot Security 具体代码实现...Security 过滤器链,在过滤器链中,给请求放行,而web方式是不走 Spring Security 过滤器链。

    9.4K31

    spring-boot-starter-data-jpa

    [Spring Boot] spring-boot-starter-data-jpa 单点登录实现准备工作(权限表设计和交互方式选择) @TOC 手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接...从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。...Spring Data JPA 官网>Spring Data JPA 特性 基于Spring和JPA构建存储库的复杂支持 支持Querydsl谓词,从而支持类型安全的JPA查询 透明审核域类 分页支持,...动态查询执行,集成自定义数据访问代码的能力 在引导时验证@Query带注释的查询 支持基于XML的实体映射 通过引入@EnableJpaRepositories实现基于JavaConfig的存储库配置...Spring Data JPA - 参考文档 核心概念 Spring Data存储库抽象中的中央接口是Repository。

    1.2K10

    WebSocket双工通信实现用户互踢功能,一个用户同时只能在一台设备上登录需求服务端实现

    笔者在掘金上调研了可行的技术方案,发现主要有以下两种实现方案: 一、客户端向服务端轮询获取当前登录用户信息,具体步骤如下: 1)用户登录成功后在浏览器的localStorage中保存用户的userId和...2)客户端通过一个定时器根据userId向服务端轮询获取当前用户最新的登录信息, 如果发现获取到的sessionId与本地localStorage中保存的sessionId不一致时就说明用户已经在别的设备上登录...列表的映射关系; 3)用户在一台设备上登录成功后,首先根据userId这个key去redis中查询当前userId对应的sessionId列表中是否已经存在一个sessionId。...配置类的configure(HttpSecurity http)方法的登录成功处理器中完成 如何在spring-security框架中实现用户登录逻辑网上已经有太多文章,这里就不赘述了,读者也可以参考笔者之前发布的文章...Spring Security入门(三): 基于自定义数据库查询的认证实战 SecurityConfig.java @Resource private RedissonClient redissonClient

    23510

    WebSocket双工通信实现一个用户只能同时在一台设备上登录需求之服务端实现

    笔者在掘金上调研了可行的技术方案,发现主要有以下两种实现方案: 一、客户端向服务端轮询获取当前登录用户信息,具体步骤如下: 1)用户登录成功后在浏览器的localStorage中保存用户的userId和...2)客户端通过一个定时器根据userId向服务端轮询获取当前用户最新的登录信息, 如果发现获取到的sessionId与本地localStorage中保存的sessionId不一致时就说明用户已经在别的设备上登录...列表的映射关系; 3)用户在一台设备上登录成功后,首先根据userId这个key去redis中查询当前userId对应的sessionId列表中是否已经存在一个sessionId。...配置类的configure(HttpSecurity http)方法的登录成功处理器中完成 如何在spring-security框架中实现用户登录逻辑网上已经有太多文章,这里就不赘述了,读者也可以参考笔者之前发布的文章...Spring Security入门(三): 基于自定义数据库查询的认证实战 SecurityConfig.java @Resource private RedissonClient redissonClient

    56010
    领券