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

Spring Security自定义过滤器(更改密码)

关于Spring Security自定义过滤器的实现,可以参考以下步骤:

  1. 创建自定义过滤器类,继承OncePerRequestFilter,并实现doFilterInternal方法。import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher; import org.springframework.web.filter.OncePerRequestFilter; public class CustomFilter extends OncePerRequestFilter { private final UserDetailsService userDetailsService; private final RequestMatcher requestMatcher = new AntPathRequestMatcher("/changePassword", "POST"); public CustomFilter(UserDetailsService userDetailsService) { this.userDetailsService = userDetailsService; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (requestMatcher.matches(request)) { String username = request.getParameter("username"); String newPassword = request.getParameter("newPassword"); try { UserDetails userDetails = userDetailsService.loadUserByUsername(username); userDetails.setPassword(newPassword); SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities())); } catch (UsernameNotFoundException e) { // handle exception } } filterChain.doFilter(request, response); } }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; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/changePassword").hasRole("USER") .and() .formLogin() .and() .addFilter(new CustomFilter(userDetailsService)); } }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; @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 org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), user.getAuthorities()); } }import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; public class User implements UserDetails { private String username; private String password; private Collection<? extends GrantedAuthority> authorities; public User(String username, String password, Collection<? extends GrantedAuthority> authorities) { this.username = username; this.password = password; this.authorities = authorities; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } }import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); }spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=mypassword spring.jpa.hibernate.ddl-auto=update <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>以上代码实现了一个简单的Spring Security自定义过滤器,用于更改密码。在实际应用中,可以根据需要进行相应的修改和扩展。
  2. 在Spring Security配置类中注册自定义过滤器。
  3. UserDetailsService接口中实现loadUserByUsername方法,根据用户名查询用户信息。
  4. User实体类中实现UserDetails接口,并添加相关属性和方法。
  5. UserRepository接口中实现findByUsername方法,根据用户名查询用户信息。
  6. application.properties文件中配置数据库连接信息。
  7. pom.xml文件中添加相关依赖。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Security 实战干货:图解Spring Security过滤器体系

前言 我在Spring Security 实战干货:内置 Filter 全解析对Spring Security的内置过滤器进行罗列,但是Spring Security真正的过滤器体系才是我们了解它是如何进行...Spring Security利用了Spring IOC和AOP的特性而无法脱离Spring独立存在,而Apache Shiro可以独立存在。所以今天我们要一探究竟,看看他们是如何结合的。...并不是在Spring Security下,而是Spring Web体系中,类图如下: ?...Spring Security提供了一个SecurityFilterChain接口来满足被匹配HttpServletRequest走特定的过滤器链的需求。...总结 结合上面,最终上述这些概念的关系彻底搞清楚了,搞清楚过滤器的运作模式对于学习和使用Spring Security至关重要。 ? Spring Security Servlet过滤器链组织关系

3.7K21
  • Spring Security密码存储

    过滤器链机制 Spring Security OAuth Client配置加载源码分析 Spring Security内置过滤器详解 为什么加载了两个OAuth2AuthorizationRequestRedirectFilter...分析 Spring Security 自定义授权服务器实践 Spring Security 自定义资源服务器实践 Spring Security 自定义用户信息端点与多种登录方式共存 Spring Security...Spring Security 提供了“工作因子”,但还是建议用户自定义自己的“工作因子”,因为不同系统的性能差异大。...然而,这忽略了三个现实问题: 有许多应用程序使用旧密码编码,无法轻松迁移 密码存储的最佳做法将再次更改 作为一个框架,Spring Security不能频繁进行更改 Spring Security引入了...例如,如果应用程序中的更改密码端点是/change password,则可以如下配置Spring Security: Example 14.

    97730

    Spring Security内置过滤器详解

    活动地址:CSDN21天学习挑战赛 相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现...GitHub快捷登录 Spring Security过滤器链机制 Spring Security OAuth Client配置加载源码分析 文章目录 前言 OAuth2AuthorizationRequestRedirectFilter...因为 Spring Security 会自动将安全标识从一个服务器传播到另一个服务器(假设使用的是正确配置的 RMI 或 HttpInvoker 远程协议客户端),这就可能很有用。...finallyInvocation(token); // continue to clean in this method for passivity ...... } 此外,Spring Security...同样的,Spring Security 提供了 AfterInvocationManager 接口,它允许我们在受保护对象访问完成后对返回值进行修改或者进行权限校验,权限校验不通过时抛出 AccessDeniedException

    1.1K10

    Spring Security入门(三):密码加密

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 Github 地址 https://github.com/ChinaSilence.../any-spring-security 本文对应 security-login-db-encryptPWD 摘要 解决2个问题: 注册时密码加密后存入数据库 登录时密码加密校验 运行程序 1、clone...代码 git clone https://github.com/ChinaSilence/any-spring-security.git 2、启动应用 mvn spring-boot:run 3、登录...相关解释说明 相比于上一个demo,在 WebSecurityConfig 中添加了如下代码: /** * 添加 UserDetailsService, 实现自定义登录校验 */...在注册时,对用户密码加密 应用 BCryptPasswordEncoder 之后,明文密码是无法被识别的,就会校验失败,只有存入密文密码才能被正常识别。所以,应该在注册时对用户密码进行加密。

    1.6K60

    Spring Security过滤器链机制

    活动地址:CSDN21天学习挑战赛 相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现...GitHub快捷登录 前言 在“码农小胖哥”的文章中提到一个关键的过滤器链SecurityFilterChain,当一个请求 HttpServletRequest 进入 SecurityFilterChain...时,会通过 matches 方法来确定是否满足条件进入过滤器链,进而决定请求应该执行哪些过滤器。...Servlet Filter代理,在xml的Spring时代,为了能使用Spring Security,需要在web.xml中添加该过滤器,而在Spring Boot中,Spring Boot的自动配置已经帮我们搞定...,内部保存了过滤器链列表,而过滤器链内部又具有各种过滤器,如图3。

    87930

    Spring Security 常见过滤器梳理

    本文将深入介绍Spring Security中一些关键过滤器的功能及其在安全体系中的角色。...一 引言 Spring Security过滤器链遵循Servlet规范,通过在应用启动时注册一系列的过滤器来拦截HTTP请求,每个过滤器都有明确的职责,共同构建起一套完整的安全防护体系。...三 高级和定制化过滤器 除上述基础过滤器外,Spring Security还支持多种高级功能,如OAuth2、JWT、X509证书认证等,它们各自有对应的过滤器和配置接口。...四 配置与定制 Spring Security提供了高度可定制的配置方式,通过Java配置类或XML配置来调整过滤器链。...五 结语 Spring Security过滤器链机制为开发者提供了一种灵活且强大的方式来保护应用程序。

    31110

    spring security 如何对密码进行加密

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top Spring Security 密码加密 Spring Security 提供了多种密码加密方式...「配置Spring Security使用PasswordEncoder」 @Configuration @EnableWebSecurity public class WebSecurityConfig...其他PasswordEncoder实现 Spring Security还提供了其他几种PasswordEncoder的实现,包括: 「NoOpPasswordEncoder」:它不对密码进行任何操作...结论 通过使用Spring Security中的「PasswordEncoder」,你可以有效地提高应用程序中密码的安全性。...在实现时,「PasswordEncoder」提供了一个标准方式,使得应用可以轻松地更改所使用的具体密码编码策略。 本文由 mdnice 多平台发布

    33210

    Spring Security(四)--核心过滤器源码分析

    前面的部分,我们关注了Spring Security是如何完成认证工作的,但是另外一部分核心的内容:过滤器,一直没有提到,我们已经知道Spring Security使用了springSecurityFillterChian...4.1 核心过滤器概述 由于过滤器链路中的过滤较多,即使是Spring Security的官方文档中也并未对所有的过滤器进行介绍,在之前,《Spring Security(二)--Guides》入门指南中我们配置了一个表单登录的...demo,以此为例,来看看这过程中Spring Security都帮我们自动配置了哪些过滤器。...其中加粗的过滤器可以被认为是Spring Security的核心过滤器,将在下面,一个过滤器对应一个小节来讲解。...伴随着整个过滤器链的介绍,安全框架的轮廓应该已经浮出水面了,下面的章节,主要打算通过自定义一些需求,再次分析其他组件的源码,学习应该如何改造Spring Security,为我们所用。

    1.4K80

    Spring Security (四) 核心过滤器源码分析

    前面的部分,我们关注了Spring Security是如何完成认证工作的,但是另外一部分核心的内容:过滤器,一直没有提到,我们已经知道Spring Security使用了springSecurityFillterChian...4 过滤器详解 4.1 核心过滤器概述 由于过滤器链路中的过滤较多,即使是Spring Security的官方文档中也并未对所有的过滤器进行介绍,在之前,《Spring Security(二)--Guides...》入门指南中我们配置了一个表单登录的demo,以此为例,来看看这过程中Spring Security都帮我们自动配置了哪些过滤器。...其中加粗的过滤器可以被认为是Spring Security的核心过滤器,将在下面,一个过滤器对应一个小节来讲解。...伴随着整个过滤器链的介绍,安全框架的轮廓应该已经浮出水面了,下面的章节,主要打算通过自定义一些需求,再次分析其他组件的源码,学习应该如何改造Spring Security,为我们所用。

    1.5K70

    Spring Security 入门(一)Spring Security中的认证与密码编码器

    Spring Security中的密码存储 Spring Security的PasswordEncoder接口是用来执行密码单向加密后安全存储的一种方式。...然而这样想忽略了三个现实的问题: 有许多使用旧密码编码的应用程序不能轻易迁移 密码存储的最佳实践将再次更改 作为一个框架,Spring Security不能频繁地进行破重大更改 因此Spring Security...为了破解自定义硬件上的密码,scrypt是一种故意缓慢的算法,它需要大量的内存。与其他自适应单向函数一样,应该将其调优为大约1秒来验证系统上的密码。...Security中的认证和密码编码器等重要概念,概括为以下几点: Spring Security 安全框架集成到Maven构建和Gradle构建的Spring Boot项目 和非Spring Boot...项目中的方式` Spring Security 安全框架通常通过用户名和密码认证用户访问资源的合法性,并进一步确定受否给认证用户授权 为保护用户的信息安全,Spring Security 要求对密码存储采用密码编码器

    1.6K30

    Spring Security自定义登录认证

    “在昨天的文章中,我们使用Spring Boot实现了一个Security的应用,但是其中登录的方式和密码都是框架中自带的,今天我们来看一下如何自定义登录认证” ?...首先说几个Spring Security的最核心组件(自认为):WebSecurityConfigurerAdapter;UserDetails;UserDetailsService;第一个类是自带的权限控制类...,通过重写它的方法来设置一些web安全的细节,UserDetails是自带的实体类,UserDetailsService是自带的用户认证的类(主要通过它来实现自定义用户登录认证)。....and() .formLogin().loginPage("/login") //这个URL比较特殊, Security...2.使用错误密码 ? 自定义登录认证到这里就实现了,也解决了昨天的第一个问题。那么第二个问题使用RESTful架构设计,如何实现权限认证呢?

    1.5K10

    Spring Security 自定义用户认证

    Spring Boot 集成 Spring Security 这篇文章中,我们介绍了如何在 Spring Boot 项目中快速集成 Spring Security,同时也介绍了如何更改系统默认生成的用户名和密码...接下来本文将基于 Spring Boot 集成 Spring Security 这篇文章中所创建的项目,进一步介绍在 Spring Security 中如何实现自定义用户认证。...当然我们也可以自定义 PasswordEncoder,但 Spring Security 中实现的 BCryptPasswordEncoder 功能已经足够强大,它对相同的密码进行加密后可以生成不同的结果...1.5 创建相关 Controller 及自定义登录页和首页 在 Spring Security 中 DefaultLoginPageGeneratingFilter 过滤器会为我们生成默认登录界面:...+ Spring Security 学习笔记(一)自定义基本使用及个性化登录配置

    1.4K20

    Spring Security 实战干货:如何保护用户密码

    前言 上一文我们对Spring Security中的重要用户信息主体UserDetails进行了探讨。中间例子我们使用了明文密码,规则是通过对密码明文添加{noop}前缀。...那么本节将对 Spring Security 中的密码编码进行一些探讨。 2. 不推荐使用md5 首先md5 不是加密算法,是哈希摘要。以前通常使用其作为密码哈希来保护密码。...这可以实现一个场景,如果有一天我们对密码编码规则进行替换或者轮转。现有的用户不会受到影响。 那么Spring Security 是如何配置密码编码器PasswordEncoder 呢? 4....总结 今天我们对Spring Security中的密码编码进行分析。发现了默认情况下使用bcrypt进行编码。而密码验证匹配则通过密码暗文前缀中的加密方式id控制。...你也可以向Spring IoC容器注入一个PasswordEncoder类型的Bean 来达到自定义的目的。我们还对bcrypt算法进行一些简单了解,对其特点进行了总结。

    86730
    领券