Security使用笔记(一)

 一、项目在pom中导入security依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

二、导入依赖后,在访问项目时就会默认跳转到一个security自带的登录页面,这个时候账号是默认的root,密码自动生成,在控制台有打印。

三、我们需要让这个登录是去查数据库进行校验,所以我们就不能用他的默认校验,而默认校验调用的是UserDetailsService接口里面的loadUserByUsername()方法,所以我们重写这个方法,让默认校验改成访问数据库校验。其次这个方法返回的是一个UserDetails 接口对象,所以我们写一个LoginUser类去实现UserDetails 接口,将查出来的user对象里面的用户名密码之类的放入LoginUser返回,这样就初步实现了查询数据库登录校验的操作(别忘了写@Service,不然这个类注入不了容器,就不会执行我们重写的这个方法)

@Service

public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired

    UserMapper userMapper;

    /**

     * 登录时security会调用 loadUserByUsername方法根据用户名查询用户信息

     * 把用户信息以及权限信息封装成UserDetails返回

     * @param

     * @return

     * @throws UsernameNotFoundException

     */

    @Override

    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {

        LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<User>();

        qw.eq(User::getUserName,name);

        User user = userMapper.selectOne(qw);

        if (user == null){

            throw new RuntimeException("没有该用户");

        }

        return new LoginUser(user);

    }

}

四、但是这个时候输入数据库里面的用户名密码,发现页面又跳回登录页,并且后端报错了

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"  这个是因为在登录的时候会默认你是使用加密的密码,然后加密方式会在你密码前面大括号里面,格式大概是:{加密方式}password。所以我们一般不常用默认加密的方式。这个时候我们就要PasswordEncoder 里面的加密方式确认下来,然后放到容器中。一般使用的是BCryptPasswordEncoder加密方式。

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean

    public PasswordEncoder passwordEncoder(){

        return new BCryptPasswordEncoder();

    }

}

五、写个单元测试,拿一下用BCryptPasswordEncoder产生的加密密码,放入数据库,

再次输入用户名密码登录,发现登进去了。

 

 

 

 

六、我们的登录时跟数据库信息进行校验了,然后还要一个问题我们平时的登录其实是有自己的界面,获取用户登录信息其实也是要通过自己定义接口去接收。所以我们要重写认证的方法,将我们接口获取到的信息传入认证方法中。认证方法是authenticationManagerBean(),

为了可以我们调用认证方法,我们重写authenticationManagerBean()方法,并且放入容器;

 

posted @ 2023-07-26 00:32  小许不错不错不错  阅读(42)  评论(0)    收藏  举报