Spring security- Send credentials as json instead of regular form in rest service

后端 未结 2 520
轻奢々
轻奢々 2020-12-17 03:44

I am writing rest service with json. For backend I use Spring Security. I have form witch sends with ajax rest object as follow:

2条回答
  •  粉色の甜心
    2020-12-17 04:42

    Well, it must not work until you write the getUserNamePasswordAuthenticationToken body.

    Actually, you must read the request body of the HttpServletRequest, parse it through Jackson or any other mapping way and create with it the UsernamePasswordAuthenticationToken.

    Using Jackson (choose the right version depending on your Spring version), I would create a simple bean like this:

    @JsonIgnoreProperties(ignoreUnkown=true)
        public LoginRequest{
         private String email;
         private String password;
         // getters & setters
        }
    

    The use it to map it the request body:

    private UsernamePasswordAuthenticationToken getUserNamePasswordAuthenticationToken(HttpServletRequest request)  throws IOException{
        StringBuffer sb = new StringBuffer();
        BufferedReader bufferedReader = null;
        String content = "";
        LoginRequest sr = null;
    
        try {
            bufferedReader =  request.getReader()
            char[] charBuffer = new char[128];
            int bytesRead;
            while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 ) {
                sb.append(charBuffer, 0, bytesRead);
            }
            content = sb.toString();
            ObjectMapper objectMapper = new ObjectMapper();
            try{
                sr = objectMapper.readValue(content, LoginRequest.class);
            }catch(Throwable t){
                throw new IOException(t.getMessage(), t);
            }
        } catch (IOException ex) {
    
            throw ex;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException ex) {
                    throw ex;
                }
            }
        }
        return new UsernamePasswordAuthenticationToken(sr.getEmail(), sr.getPassword());
    

    }

    P.D. Yo must use Post, you will never be able to post a request-body using GET

提交回复
热议问题