SpringSecurity入门实践

99 阅读1分钟

1、SpringSecurit实践入门

1.1、自定义登录逻辑

  1. 自定义密码加密的编码器
@Bean
public PasswordEncoder getPasswordEncoder() {
    return new BCryptPasswordEncoder();
}
  1. 自定义用户名及密码
@Service
public class MyUserDetailService implements UserDetailsService {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (!"lzq".equals(username)){
            throw new UsernameNotFoundException("用户名不存在");
        }

        return new User(username,
                passwordEncoder.encode("12345"),//设置密码
                AuthorityUtils.commaSeparatedStringToAuthorityList("admin,user"));//设置认证权限

    }
}
  1. 自定义登录页面
@EnableWebSecurity(debug = true)
public class SecurityConfig {

    @Bean
    SecurityFilterChain configure(HttpSecurity http) throws Exception {
        http.formLogin()
                //自定义登录页面
                .loginPage("/login.html")
                //自定义登录请求接口的url
                .loginProcessingUrl("/login")
                //自定义登录成功后跳转的接口请求url
                .successForwardUrl("/hello");

        http.authorizeHttpRequests()
                //放行登录页面请求
                .antMatchers("/login.html").permitAll().
                //其余请求都需要登录认证
                anyRequest() .authenticated();
        //关闭csrf防护
        http.csrf().disable();
        return http.build();
    }
}

4.自定义登录成功及失败的处理器

http.formLogin().successHandler(自定义的登录成功处理类)//自定义登录成功类实现AuthenticationSuccessHandler接口并重写onAuthenticationSuccess方法,在方法内编写登录成功逻辑。
http.formLogin().failureHandler(自定义的登录失败处理类)//自定义登录失败类实现AuthenticationFailureHandler接口并重写onAuthenticationFailure方法,在方法内编写登录失败逻辑。