SpringSecurity登录JSON传参

1.自定义相关过滤器继承UsernamePasswordAuthenticationFilter,只需要将这个过滤器替换掉即可。

import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gla.common.lang.Result;
import com.gla.entity.User;
import com.gla.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.stereotype.Component;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
 * @author :jerry
 * @date :Created in 2022/3/22 11:49
 * @description:JSON传参
 * @version: V1.1
 */
public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {

   

        @Override	
        public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {	
            if (request.getContentType().equals(MediaType.APPLICATION_JSON_UTF8_VALUE)	
                    || request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE)) {	
                ObjectMapper mapper = new ObjectMapper();	
                UsernamePasswordAuthenticationToken authRequest = null;	
                try (InputStream is = request.getInputStream()) {	
                    Map<String,String> authenticationBean = mapper.readValue(is, Map.class);	
                    authRequest = new UsernamePasswordAuthenticationToken(	
                            authenticationBean.get("username"), authenticationBean.get("password"));	
                } catch (IOException e) {	
                    e.printStackTrace();	
                    authRequest = new UsernamePasswordAuthenticationToken(	
                            "", "");	
                } finally {	
                    setDetails(request, authRequest);	
                    return this.getAuthenticationManager().authenticate(authRequest);	
                }	
            }	
            else {	
                return super.attemptAuthentication(request, response);	
            }	
        }	

}

实例:

 

2.SecurityConfig配置

    @Override    
    protected void configure(HttpSecurity http) throws Exception {    
        http.authorizeRequests().anyRequest().authenticated()    
                .and()    
                .formLogin()    
                .and().csrf().disable();    
        http.addFilterAt(customAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);    
    }    
    @Bean    
    CustomAuthenticationFilter customAuthenticationFilter() throws Exception {    
        CustomAuthenticationFilter filter = new CustomAuthenticationFilter();    
        filter.setAuthenticationSuccessHandler(new AuthenticationSuccessHandler() {    
            @Override    
            public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException, ServletException {    
                resp.setContentType("application/json;charset=utf-8");    
                PrintWriter out = resp.getWriter();    
                RespBean respBean = RespBean.ok("登录成功!");    
                out.write(new ObjectMapper().writeValueAsString(respBean));    
                out.flush();    
                out.close();    
            }    
        });    
        filter.setAuthenticationFailureHandler(new AuthenticationFailureHandler() {    
            @Override    
            public void onAuthenticationFailure(HttpServletRequest req, HttpServletResponse resp, AuthenticationException e) throws IOException, ServletException {    
                resp.setContentType("application/json;charset=utf-8");    
                PrintWriter out = resp.getWriter();    
                RespBean respBean = RespBean.error("登录失败!");    
                out.write(new ObjectMapper().writeValueAsString(respBean));    
                out.flush();    
                out.close();    
            }    
        });    
        filter.setAuthenticationManager(authenticationManagerBean());    
        return filter;    
    }

实例: 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值