首页
学习
活动
专区
工具
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.7K31
  • 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获取其中useridredis获取用户信息 ④ 存入SecurityContextHolder...默认情况下调用是 InMemoryUserDetailsManager方法,该UserDetailsService是内存获取用户数据。...此时控制台会输出如下错误: 报错原因:默认情况下Spring Security获取到UserDetailsService返回用户信息以后,会调用PasswordEncodermatches方法进行校验...② 配置加密算法 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.3K20

    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拿到数据以后,就会将这个唯一标识和用户

    86110

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

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

    79330

    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 入口 为了能够捕获认证过程中出现所有异常,这里通过复写securitytoken入口,来实现此目的 内容其实少,就是手动去调用tokenPoint方法触发 package

    73911

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

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

    3.3K20

    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。...每次手动刷新客户端也很麻烦,有没有什么办法只要提交代码就自动调用客户端来更新呢,githubwebhook是一个好办法

    1.2K80

    Spring Boot Security 基本使用一

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

    38720

    权限框架 | 学会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-tokensession模式需要redis来存储session,微服务,各个服务session...gateway也需要配置sa-token和redis,注意和在account服务配置要一致,否则在redis获取信息时候找不到。...、权限接口 account实现通过用户获取角色、获取权限接口 RoleController、PermissionController @RestController @RequestMapping

    1.1K11

    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

    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

    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

    16910

    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

    38310
    领券