SpringSecurity前后端分离登录返回Json字符串

1.SpringSecurity配置类

/**
 * @author hht
 * @date 2020/9/23 13:17
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    IUserService userService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/csgo/box/**", "/csgo/**", "/order/**").permitAll()
                .and().csrf().disable()
                .formLogin()
                //指定登录地址
                .loginProcessingUrl("/doLogin")
                .permitAll()
                //登录失败,返回json
                .failureHandler(new AuthenticationFailureHandler() {
                    @Override
                    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
                        response.setContentType("application/json;charset=utf-8");
                        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                        PrintWriter writer = response.getWriter();
                        CommonResult<String> result;
                        if (exception instanceof UsernameNotFoundException || exception instanceof BadCredentialsException) {
                            result = CommonResult.fail("用户名或密码错误");
                        } else if (exception instanceof DisabledException) {
                            result = CommonResult.fail("用户无权限");
                        } else {
                            result = CommonResult.fail("登录失败");
                        }
                        writer.write(new ObjectMapper().writeValueAsString(result));
                        writer.flush();
                        writer.close();
                    }
                })
                //登陆成功,返回json
                .successHandler(new AuthenticationSuccessHandler() {
                    @Override
                    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        response.setContentType("application/json;charset=utf-8");
                        response.setStatus(HttpServletResponse.SC_OK);
                        PrintWriter writer = response.getWriter();
                        User user =  (User) authentication.getPrincipal();
                        writer.write(new ObjectMapper().writeValueAsString(CommonResult.success("success", user)));
                        writer.flush();
                        writer.close();
                    }
                })
                .and()
                .httpBasic()
                //未登录时提示
                .authenticationEntryPoint(new AuthenticationEntryPoint() {
                    @Override
                    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
                        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                        response.setContentType("application/json;charset=utf-8");
                        PrintWriter writer = response.getWriter();
                        CommonResult<Object> result = new CommonResult<>(401, "请登录");
                        writer.write(new ObjectMapper().writeValueAsString(result));
                        writer.flush();
                        writer.close();
                    }
                })
                .and()
                //异常处理
                .exceptionHandling()
                //访问拒绝处理,返回json
                .accessDeniedHandler(new AccessDeniedHandler() {
                    @Override
                    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
                        response.setContentType("application/json;charset=utf-8");
                        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
                        PrintWriter writer = response.getWriter();
                        CommonResult<Object> result = new CommonResult<>(403, "访问被拒绝");
                        writer.write(new ObjectMapper().writeValueAsString(result));
                        writer.flush();
                        writer.close();
                    }
                })
                .and()
                //注销
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessHandler(new LogoutSuccessHandler() {
                    @Override
                    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        response.setContentType("application/json;charset=utf-8");
                        response.setStatus(HttpServletResponse.SC_OK);
                        PrintWriter writer = response.getWriter();
                        writer.write(new ObjectMapper().writeValueAsString(CommonResult.success("注销成功",null)));
                        writer.flush();
                        writer.close();
                    }
                })
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(new BCryptPasswordEncoder());
    }
}

2.使用postman测试

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值