spring security 实现自定义认证和登录(2):在自己的请求路径中进行用户验证

因为引入spring security之后,前端请求的所有路径都要进行登录才能响应,我现在我想用我自己的登录路径让用户登录,不用spring security内置的登录,怎么办呢?这就要放行你自己的login路径。

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
        http
                .authorizeHttpRequests((authz) -> authz
                        .requestMatchers(new AntPathRequestMatcher("/login2")).permitAll()
                        .anyRequest().authenticated()
                ).httpBasic(withDefaults()).csrf().disable()
    ;

        return http.build();
}

注意一定要把csrf给禁用了!!



接下来仿造官网的认证过程:


在这里插入图片描述


1. 添加一个AuthenticationManager到Bean中

由上图可以看到用户名密码是由AuthenticationManager来认证的,而ProviderManager是其一个实现类:

在这里插入图片描述


所以这里要整一个ProviderManager


在这里插入图片描述

注意:打箭头的地方不能new一个UserDetailsService,要用之前写的那个注入进来


    @Resource
    CustomUserDetailsService userDetailsService;

    @Bean
    public AuthenticationManager authenticationManager(){
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
        daoAuthenticationProvider.setUserDetailsService(userDetailsService);
        return new ProviderManager(daoAuthenticationProvider);
    }

ProviderManager的构造参数中要放什么东西?
ProviderManager中可以注入多个AuthenticationProvider,其中DaoAuthenticationProvider 是用来验证用户名和密码的一种AuthenticationProvider


在这里插入图片描述


2. 验证用户


在这里插入图片描述
根据途中的过程,第一步就是创建一个UsernamePasswordAuthenticationToken ,其中的构造参数就是用户名和密码。第二步就是交给创建好的AuthenticationManager 进行验证。

    @Resource
    AuthenticationManager authenticationManager;

    @PostMapping("/login2")
    public String login(@ModelAttribute LoginParams loginParams){

        //1. 创建一个UsernamePasswordAuthenticationToken
        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(loginParams.getUsername(), loginParams.getPassword());

        //2. 使用authenticationManager进行认证
        Authentication authentication = authenticationManager.authenticate(usernamePasswordAuthenticationToken);

        //3. 检查是否认证成功:null就是不成功
        if(authentication == null) return "failed";
        return "success";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值