Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
78 views
in Technique[技术] by (71.8m points)

java - Spring Security redirect to https

I'm starting my application with Spring Boot on http server port 11218 and I have Undertow https listener which listen port 8090. Ssl is working fine, but I can't redirect from 11218 port to 8090. I tried to use Spring Security but received

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:422) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110) at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59) at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:395) at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at ru.openbank.platform.filters.MDCFilter.doFilterInternal(MDCFilter.java:55) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61).

Request: http://127.0.0.1:11218/encashment/send

Spring Security:

private void redirect(HttpSecurity http) throws Exception {
    http.requiresChannel()
     .mvcMatchers("/encashment/send")
     .requiresSecure()
     .and().portMapper().http(11218).mapsTo(8090);
}

Undertow configuration:

 @SneakyThrows
    @Bean
    public UndertowServletWebServerFactory undertowServletWebServerFactory() {
        UndertowServletWebServerFactory undertowServletWebServerFactory = new UndertowServletWebServerFactory();

        KeyStore trustStore = KeyStore.getInstance("JKS");
        trustStore.load(new FileInputStream(trustStoreFile), trustStorePassword.toCharArray());

        KeyManagerFactory keyManagerFactory =
                KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(trustStore, trustStorePassword.toCharArray());

        TrustManagerFactory trustManagerFactory =
                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trustStore);

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagerFactory.getKeyManagers(),
                trustManagerFactory.getTrustManagers(),
                new SecureRandom());

        undertowServletWebServerFactory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

            @Override
            public void customize(Undertow.Builder builder) {
                builder.addHttpsListener(additionalPort, "127.0.0.1", 
                sslContext).setHandler(path().addPrefixPath("/encashment", websocket(
                        (exchange, channel) -> {
                            channel.resumeReceives();
                        })));

            }
        });

        return undertowServletWebServerFactory;
    }

My Controller:

@PostMapping("/send")
@ApiOperation("Передача информации об инкасации на Тибко")
public JsonItem<EncashmentInfoResponse> sendEncashmentInfo(@Valid @RequestBody EncashmentInfoDto encashmentInfoDto) {
    encashmentInfoDto.setPersonId(authenticationUtil.getPersonId());
    return encashmentService.sendEncashmentInfo(encashmentInfoDto);
}
question from:https://stackoverflow.com/questions/65941061/spring-security-redirect-to-https

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...