用户认证
设置用户名、密码
1、配置文件
(1)application.properties
#用户名
spring.security.user.name=
#密码
spring.security.user.password=
(2)application.yaml
spring:
security:
user:
#用户名
name:
#密码
password:
2、配置类:继承 WebSecurityConfigurerAdapter 类(已弃用)
3、实际开发中自定义实现类,从数据库查询用户信息
自定义实现类(示例)
1、创建配置类,指定 UserDetailsService 接口的实现类
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//设置UserDetailsService、密码编码器
auth.userDetailsService(userDetailsService).passwordEncoder(password());
}
@Bean
PasswordEncoder password(){
return new BCryptPasswordEncoder();
}
}
2、编写实现类,返回 User 对象,User 对象包含用户名、密码、操作权限
@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserMapper userMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//调用userMapper方法,根据用户名查询数据库
QueryWrapper<Users> wrapper = new QueryWrapper();
wrapper.eq("username",username);
Users users = userMapper.selectOne(wrapper);
//数据库中没有用户名,认证失败
if (user == null) {
throw new UsernameNotFoundException("用户名不存在");
}
//从查询数据库返回的user对象中,获取用户名、密码
List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
return new User(user.getUsername(),new BCryptPasswordEncoder().encode(user.getPassword()),auths);
}
}
3、查询数据库
(1)引入依赖
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 简化开发 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- MyBatis-Plus启动器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
(2)创建数据库、数据表:users 表,三个字段(id,username,password)
(3)配置数据库
#MySQL数据库连接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=UTF-8&userSSL=false
username: root
password: 123456
(4)创建 users 表对应 JavaBean
@Data
public class Users {
private Integer id;
private String username;
private String password;
}
(5)创建 Mapper 接口
@Repository
@Mapper
public interface UserMapper extends BaseMapper<Users> {
}
(6)扫描 Mapper:主配置类添加 @MapperScan("指定包路径")
自定义用户登陆页面
1、配置类中实现相关配置
@Override
protected void configure(HttpSecurity http) throws Exception {
//开启自定义登陆页面
http.formLogin()
//设置登陆页面
.loginPage("/index.html")
//登录访问路径
.loginProcessingUrl("/user/login")
//登录成功后,所跳转路径
.defaultSuccessUrl("/test/success").permitAll()
.and()
//设置不需要认证,可以直接访问的页面
.authorizeRequests().antMatchers("/","/test/hello","/user/login").permitAll()
//所有用户都可以访问
.anyRequest().authenticated();
}
2、创建相关页面、Controller
(1)index.html(/user/login)
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<form action="/user/login" method="post">
用户名:<input type="text" name="username"/>
<br/>
密码:<input type="text" name="password"/>
<br/>
<input type="submit" value="login"/>
</form>
</body>
</html>
(2)Spring Security 自动创建 Controller
(3)Spring Security 底层要求:页面中默认账号、密码 name 属性必须为 username 和 password
public class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username";
public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password";
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战