HttpServletRequest对象中获取POST请求json参数,并转换为java实体类对象,此处使用com.alibaba.fastjson来做转换,因此需要引入此坐标依赖。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
private byte[] getParameterByte(HttpServletRequest request) throws IOException {
int contentLength = request.getContentLength();
if (contentLength < 0) {
return null;
}
byte[] buffer = new byte[contentLength];
for (int i = 0; i < contentLength; ) {
int readLen = request.getInputStream().read(buffer, i, contentLength - i);
if (readLen == -1) {
break;
}
i += readLen;
}
return buffer;
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
// 从请求body中解析出用户名和密码等入参
byte[] parameterByte = new byte[0];
try {
parameterByte = getParameterByte(request);
} catch (IOException e) {
e.printStackTrace();
}
if (parameterByte == null) {
throw new BusinessException("参数不能为空");
}
LoginUserDTO loginUserDTO = JSON.parseObject(new String(parameterByte,StandardCharsets.UTF_8), LoginUserDTO.class);
}