好吧,除非您编写 getUserNamePasswordAuthenticationToken 主体,否则它一定不能起作用。
实际上,您必须阅读HttpServletRequest的请求正文,通过Jackson或任何其他映射方式对其进行解析,并使用它创建UsernamePasswordAuthenticationToken。
使用Jackson(根据您的Spring版本选择正确的版本),我将创建一个像这样的简单bean:
@JsonIgnoreProperties(ignoreUnkown=true) public LoginRequest{ private String email; private String password; // getters & setters }
使用它来映射它的请求主体:
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());
}
PD Yo必须使用Post,您将永远无法使用GET发布请求正文
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)