Springboot+SpringSecurity设置默认密码的三种方式

方式一:配置文件

1)、yml格式:

security:
    # 配置默认的 InMemoryUserDetailsManager 的用户账号与密码。
    user:
      name: chenc # 账号
      password: 123456 # 密码

2)、properties格式:

spring.security.user.name=chenc
spring.security.user.password=123456

这时,登录:chenc 密码:123456

方式二:设置配置类

1)、编写一个类继承WebSecurityConfigurerAdapter抽象类
2)、重写configure(AuthenticationManagerBuilder auth) 方法设置用户名和密码

package work.chenc.springsecurity.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 实现AuthenticationManager 认证管理器
     * 注入配置文件
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 设置密码加密方式
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        // 对密码进行加密
        String password = passwordEncoder.encode("123");
        // inMemoryAuthentication-在内存中设置用户名和密码
        // roles("admin") - 角色权限
        auth.inMemoryAuthentication().withUser("marry").password(password).roles("admin");

    }

    // There is no PasswordEncoder mapped for the id "null"
    // 密码加密需要自己手动创建 PasswordEncoder 对象
    // PasswordEncoder是接口  BCryptPasswordEncoder 实现了PasswordEncoder接口
    @Bean
    PasswordEncoder password() {
        return  new BCryptPasswordEncoder();
    }
}

这时,登录:marry 密码:123

方式三:自定义实现类设置账号密码

1)、编写配置类

package work.chenc.springsecurity.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;


@Configuration
public class SecurityConfig1 extends WebSecurityConfigurerAdapter {

    // 注入UserDetailsService
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        /**
         * 将UserDetailsService接口注入auth的userDetailsService()方法中
         * passwordEncoder(password()) 对密码进行加密
         */
        auth.userDetailsService(userDetailsService).passwordEncoder(password());

    }

    @Bean
    PasswordEncoder password() {
        return new BCryptPasswordEncoder();
    }

}

2)、编写实现类实现UserDetailsService,重写loadUserByUsername()方法

package work.chenc.springsecurity.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {


    /**
     * @param username - 前台传入的参数
     * @return
     * @throws UsernameNotFoundException
     * 返回一个实现UserDetails接口的User对象
     *
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        // 假定创建有一个这样的权限组
        List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("role");
        // 填入用户名 密码 以及权限组(权限组不能为null)
        return new User("Jerry", new BCryptPasswordEncoder().encode("123456"), auths);
    }
}

这时,登录:Jerry 密码:123456

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容