实现数据库用户校验

导入my-batis-plus依赖:

<dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.5.3.1version>
        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,请使用_进行数据库命名

实现数据库用户校验_第1张图片

尝试进行登陆,将用户名密码改成数据库中设置好的内容。

由于将加密密码存入数据库中,所以还要设置加密器

@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());
    }

实现数据库用户校验_第2张图片

此时返回的用户信息正确

你可能感兴趣的:(数据库)