摆脱POST /重定向/ GET模式

时间:2019-04-10 14:01:41

标签: java spring-boot http

我注意到,每当我执行POST请求并在Spring中重定向时,都会将其重定向到GET请求。是否有任何设置可以关闭此行为?我希望将POST重定向到POST。

我需要它有两个原因:

  1. 我们通过http和https提供应用程序。使用连接器将Http重定向到https:
@Bean
public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(getHttpConnector());
        return tomcat;
    }

    private Connector getHttpConnector() {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setSecure(false);
        ...
        connector.setPort(httpPort);
        ...
        connector.setRedirectPort(httpsPort);
        return connector;
    }

使用在线身份验证,一切都很好。用户通过HTTP,重定向到HTTPS,显示登录页面。身份验证通过HTTPS进行。

API身份验证出现问题。我需要一种直接从url验证用户身份的方法。例如:[POST] http://myapp/api 凭证信息在请求正文中传递。该请求被重定向到HTTPS,但是主体丢失了。您是否认为在这种情况下启用HTTP是不安全的,我们应该辞职吗?

  1. 我们有很多遗留代码,其中前端建立在一个URL上-其他参数指定哪个处理程序应处理给定的请求。为了避免重写前端,我们有一个转发器,它将请求发送到相应的URL。
return new ModelAndView("forward:/" + action + "?" + extraParams + bodyParams);  

这行得通,但是我可以想象在某些情况下主体会太大而无法通过url中的GET传递。

技术: 春季启动:2.0.6

0 个答案:

没有答案