导入my-batis-plus依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
在dto下创建Acoount类,用于保存账户信息:
@Data
@TableName("db-account")
@AllArgsConstructor
public class Account {
@TableId(type = IdType.AUTO)
Integer id;
String username;
String password;
String email;
String role;
Date registerTime;
}
在sql中创建对应的表,包含以上的属性,将id设为自动增加。
在mapper包下创建AccountMapper类:
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
}
在service包下创建AccountService接口:
public interface AccountService extends IService<Account> , UserDetailsService {
Account findAccountByNameOrEmail(String text);
}
创建AccountServiceImpl代理:
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Account account=this.findAccountByNameOrEmail(username);
if (account==null){
throw new UsernameNotFoundException("用户名或密码错误");
}
return User.withUsername(username)
.password(account.getPassword())
.roles(account.getRole())
.build();
}
public Account findAccountByNameOrEmail(String text){
return this.query()
.eq("username",text).or()
.eq("email",text)
.one();
}
}
配置数据库连接:
datasource:
username: root
password: yyt320581
url: jdbc:mysql://localhost:3306/vue-database
driver-class-name: com.mysql.cj.jdbc.Driver
在yaml配置文件中:后有空格
由于我建立的表名为db-account,导致发生语法错误,最后mybatis给出的语句中只有-account,请使用_进行数据库命名
尝试进行登陆,将用户名密码改成数据库中设置好的内容。
由于将加密密码存入数据库中,所以还要设置加密器
@Test
void contextLoads() {
System.out.println(new BCryptPasswordEncoder().encode("123456"));
}
新建WebConfiguration中设置加密器:
```Plain Text @Configuration public class WebConfiguration { @Bean BCryptPasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }
![](/tmp/651147134636430E00ED2A34/media/实现数据库用户校验+aed364a0-42e9-4a27-b49a-3b2e90ddee4c/image 1.png)
此时与数据库中的账号信息比对后成功登陆
由于redis安装在wsl2中,运行时报错Unable to connect to Redis
首先打开wsl2,输入命令redis-server运行redis,运行命令ip addr show eth0 | grep -oP '(?<=inet\s)\d+(.\d+){3}'
查看运行的wsl2实例的ip地址,查看redis运行的默认端口号为6379,在idea中配置redis。
在这之前需要为redis配置文件,请查看redis数据库页面来进行相应配置。
问题已解决,通过安装非官方windows版redis能够正常运行
登陆后返回的用户信息仍然为测试时硬编码的内容,注入accountserviec并修改处理方法:
```Plain Text
@Resource
AccountService service;
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
response.setContentType("application/json;charset=utf-8");
User user=(User)authentication.getPrincipal();
AuthorizeVO vo =new AuthorizeVO();
Account account=service.findAccountByNameOrEmail(user.getUsername());
String token =utils.createJwt(user,account.getId(),account.getUsername());
vo.setExpire(utils.expireTime());
vo.setRole(account.getRole());
vo.setToken(account.getRole());
vo.setUsername(account.getUsername());
response.getWriter().write(RestBean.success(vo).asJsonString());
System.out.println(RestBean.success(token).asJsonString());
}
此时返回的用户信息正确