这个课让我感到困扰,我可能需要一些输入才能重构它。这是一个spring安全过滤器,因此只要有人登录,就会调用两个方法 - getPreAuthenticatedPrincipal(HttpServletRequest请求)和getPreAuthenticatedCredentials(HttpServletRequest请求)。
理想情况下,你应该可以执行request.getParameter(“username”)和request.getParameter(“password”) - 但是那些在我的应用程序中返回null,你只能执行一次request.getInputStream() - 之后,该方法返回null。
因此,我必须创建一个JSONObject成员变量,并将请求参数存储在JSONObject中,以便在两种方法中使用。有没有更好的方法来设计这个类?
感谢任何输入
public class UserAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {
protected JSONObject jsonObj = null;
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
try {
String jsonString = IOUtils.toString(request.getInputStream());
System.out.println(jsonString);
if (jsonObj == null) {
jsonObj = new JSONObject(jsonString);
}
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
String userName = jsonObj.getString("username");
System.out.println(userName);
return userName;
}
@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
String passWd = jsonObj.getString("password");
System.out.println(passWd); return passWd;
}
}