Java 实现这个spring预认证过滤器的更好方法?

Java 实现这个spring预认证过滤器的更好方法?,java,Java,这个类困扰着我,我可能需要一些关于重构它的最佳方法的输入。这是一个spring安全过滤器,因此无论何时有人登录,都会调用这两个方法——getPreAuthenticatedPrincipal(HttpServletRequest请求)和getPreAuthenticatedCredentials(HttpServletRequest请求) 理想情况下,您应该能够执行request.getParameter(“用户名”)和request.getParameter(“密码”)——但在我的应用程序中,

这个类困扰着我,我可能需要一些关于重构它的最佳方法的输入。这是一个spring安全过滤器,因此无论何时有人登录,都会调用这两个方法——getPreAuthenticatedPrincipal(HttpServletRequest请求)和getPreAuthenticatedCredentials(HttpServletRequest请求)

理想情况下,您应该能够执行request.getParameter(“用户名”)和request.getParameter(“密码”)——但在我的应用程序中,它们返回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;

        }
    }

我很困惑。如果仍然需要对用户进行身份验证,为什么要编写“PreAuthenticatedAuthentication”筛选器?为什么凭据是请求正文的一部分?身份验证筛选器通常与http标头中的凭据一起使用。我无法更改筛选器的类型或凭据访问筛选器的方式。这个问题更像是一个java问题,而不是一个“spring安全性”问题。@rmlan-我在一个团队中工作,涉及到其他系统,我无法控制它们。我只是在按照别人给我的规格工作——你对一套你一无所知的系统做出判断有点冒昧。为了从一般意义上回答您的问题,我们必须使用预验证过滤器,因为我们的“过滤器链”中有一个数字系统,我们需要在登录过程中对其进行验证。这一部分只是身份验证过程的一部分,需要在登录过程的这一点上进行。