网站代码500,中国电子商务网站,百度网址大全首页链接,福州网站设计培训在Spring Boot框架中集成 Spring Security
目录
技术介绍SpringSecurity的核心功能#xff1a;SpringSecurity特点#xff1a;具体实现 1、集成依赖2、修改spring security实现service.impl.UserDetailsServiceImpl类 代码1具体解释代码2具体解释 实现config.SecurityConfi…在Spring Boot框架中集成 Spring Security
目录
技术介绍SpringSecurity的核心功能SpringSecurity特点具体实现 1、集成依赖2、修改spring security实现service.impl.UserDetailsServiceImpl类 代码1具体解释代码2具体解释 实现config.SecurityConfig类 代码具体解释 总结
技术介绍
Spring Security是一个基于Spring框架的安全性框架它提供了一系列的安全性服务包括认证、授权、攻击防护等等。Spring Boot是一个快速开发应用程序的框架它提供了很多开箱即用的功能和约定使得构建一个Spring应用程序变得更加简单。将Spring Security集成进Spring Boot应用程序中可以为应用程序提供基于角色的访问控制、用户身份验证等安全性的功能。
SpringSecurity的核心功能
用户认证Authentication系统判断用户是否能登录 用户授权Authorization系统判断用户是否有权限去做某些事情
SpringSecurity特点
Spring 技术栈的组成部分与Spring 无缝整合。全面的权限控制能提供完整可扩展的认证和授权支持保护专门为 Web 开发而设计。重量级需要引入各种家族组件与依赖
具体实现
1、集成依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactIdversion2.7.1/version/dependency2、修改spring security
为了实现与数据库对接让用户能正常登录授权我们需要实现一些配置类
实现service.impl.UserDetailsServiceImpl类
继承自UserDetailsService接口用来接入数据库信息
Service
public class UserDetailsServiceImpl implements UserDetailsService {Autowiredprivate UserMapper userMapper;Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(username, username);User user userMapper.selectOne(queryWrapper);if (user null) {throw new RuntimeException(用户不存在);}return new UserDetailsImpl(user);}
}
代码1具体解释
这段代码是一个实现了Spring Security中UserDetailsService接口的服务类用于从数据库中获取用户信息并返回一个UserDetails对象。具体解释如下
Service注解表示这是一个Spring的服务类用于处理业务逻辑。实现UserDetailsService接口并覆盖其中的loadUserByUsername()方法。该方法的参数是用户的用户名方法的返回值是一个UserDetails对象。在这个方法中我们可以根据用户名查找数据库中的用户信息然后将其封装成一个UserDetailsImpl对象返回。在该类中注入了一个UserMapper对象用于访问数据库。UserMapper是一个MyBatis的Mapper接口它定义了一些操作数据库的方法。在loadUserByUsername()方法中我们使用了MyBatis-Plus提供的QueryWrapper对象来构造查询条件查询指定用户名的用户信息。如果查询结果为null说明该用户不存在我们抛出一个RuntimeException异常。如果查询结果不为null则将查询到的用户信息封装成一个UserDetailsImpl对象返回。UserDetailsImpl是一个实现了UserDetails接口的类它将数据库中的用户信息封装起来以便于Spring Security进行认证和授权。
Data
NoArgsConstructor
AllArgsConstructor
public class UserDetailsImpl implements UserDetails {private User user;Overridepublic Collection? extends GrantedAuthority getAuthorities() {return null;}Overridepublic String getPassword() {return user.getPassword();}Overridepublic String getUsername() {return user.getUsername();}Overridepublic boolean isAccountNonExpired() {return true;}Overridepublic boolean isAccountNonLocked() {return true;}Overridepublic boolean isCredentialsNonExpired() {return true;}Overridepublic boolean isEnabled() {return true;}
}
代码2具体解释
这段代码是一个实现了UserDetails接口的类用于封装用户的详细信息。具体解释如下
Data、NoArgsConstructor和AllArgsConstructor注解是Lombok注解用于自动生成getter和setter方法以及无参构造函数和全参构造函数。UserDetailsImpl类实现了UserDetails接口并实现了其中的方法。UserDetails是Spring Security中的一个接口用于封装用户的详细信息如用户名、密码、角色等信息。在该类中定义了一个User类型的成员变量user用于保存从数据库中查询到的用户信息。覆盖了getAuthorities()方法该方法返回用户的权限信息。在这里我们暂时返回null表示用户没有任何权限。覆盖了getPassword()方法该方法返回用户的密码。覆盖了getUsername()方法该方法返回用户的用户名。覆盖了isAccountNonExpired()方法该方法返回一个boolean值表示用户的账号是否过期。在这里我们返回true表示账号没有过期。覆盖了isAccountNonLocked()方法该方法返回一个boolean值表示用户的账号是否被锁定。在这里我们返回true表示账号没有被锁定。覆盖了isCredentialsNonExpired()方法该方法返回一个boolean值表示用户的凭证如密码是否过期。在这里我们返回true表示凭证没有过期。覆盖了isEnabled()方法该方法返回一个boolean值表示用户是否可用。在这里我们返回true表示用户可用。
总的来说这个类的作用是将数据库中的用户信息封装成一个UserDetails对象以便于Spring Security进行身份认证和权限控制。在实际的应用中我们需要在getAuthorities()方法中返回用户的权限信息并在其他方法中根据需要返回相应的值。
实现config.SecurityConfig类
用来实现用户密码的加密存储
Configuration
EnableWebSecurity
public class SecurityConfig {Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}代码具体解释
这段代码是一个Spring Security配置类用于配置密码加密器。
具体解释如下
Configuration注解表示这是一个Spring配置类。EnableWebSecurity注解表示启用Spring Security的Web安全功能。在该类中定义了一个名为passwordEncoder()的Bean并返回一个BCryptPasswordEncoder对象。这个Bean用于对密码进行加密和解密操作。BCryptPasswordEncoder是一种密码加密器它使用bcrypt算法对密码进行哈希加密。哈希加密是一种单向加密方式它将原始的密码字符串转换成一个不可逆的哈希值从而保证密码的安全性。
在实际的应用程序中我们通常会在用户注册或修改密码时使用密码加密器对用户的密码进行加密操作并将加密后的密码存储在数据库中。在用户登录时我们需要对用户输入的密码进行加密并与数据库中存储的密码进行比对。如果两者一致则说明用户输入的密码正确允许用户登录。而如果不一致则说明密码错误拒绝用户登录。
因此密码加密器是Spring Security中非常重要的一部分它可以提高应用程序的安全性保护用户的隐私信息。
总结
在Web应用程序中安全是一个非常重要的问题Spring Security是一个强大的安全框架可以帮助我们实现Web应用程序的安全性。在使用Spring Security时我们需要进行以下几个步骤 配置用户认证 用户认证是Spring Security的核心功能之一。在认证过程中Spring Security会使用用户提供的凭证如用户名和密码与应用程序中存储的凭证进行比对以确定用户的身份是否合法。在认证过程中我们需要配置用户信息存储方式、密码加密方式等信息。 配置授权 在Web应用程序中不同的用户可能需要访问不同的资源和功能。因此我们需要配置授权以确定哪些用户可以访问哪些资源和功能。在Spring Security中可以使用角色或权限来进行授权管理。 配置安全策略 在Web应用程序中除了用户认证和授权之外我们还需要考虑其他方面的安全问题例如防止跨站点脚本攻击XSS、防止跨站点请求伪造CSRF等。在Spring Security中可以使用安全策略来解决这些问题。 配置密码加密器 在Web应用程序中密码是一项非常重要的信息。为了保护用户的密码我们需要使用密码加密器对密码进行加密操作。在Spring Security中可以使用各种密码加密器来对密码进行加密和解密。
总的来说Spring Security是一个非常强大的安全框架可以帮助我们实现Web应用程序的安全性。在使用Spring Security时我们需要考虑到应用程序的实际需求进行相应的配置和调整。同时我们也需要保持对最新的安全问题和解决方案的关注及时更新应用程序的安全策略。