小编San*_*cho的帖子

Eureka服务器不适用于Spring Boot 2.0.0.M4

我试图将基于微服务的Web应用程序从Spring Boot 2.0.0.M3更新到最新的2.0.0.M4。

当运行我的Eureka服务器时,我面临以下异常,并且上下文不会加载:

2017-09-19 10:22:05.455  INFO 16388 --- [           main] o.s.core.annotation.AnnotationUtils      : Failed to introspect annotations on [class org.springframework.cloud.netflix.hystrix.HystrixAutoConfiguration$$EnhancerBySpringCGLIB$$5d536e23]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2017-09-19 10:22:05.456  INFO 16388 --- [           main] o.s.core.annotation.AnnotationUtils      : Failed to introspect annotations on [class org.springframework.cloud.netflix.hystrix.HystrixAutoConfiguration$$EnhancerBySpringCGLIB$$5d536e23]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2017-09-19 10:22:05.572  INFO 16388 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-09-19 10:22:05.573  INFO 16388 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-09-19 10:22:05.579  INFO 16388 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : …
Run Code Online (Sandbox Code Playgroud)

spring spring-boot spring-cloud netflix-eureka spring-cloud-netflix

5
推荐指数
0
解决办法
969
查看次数

Spring Webflux WebFilter 中的会话管理

我正在使用 Spring Webflux 并以这种方式在我的网络过滤器中处理会话:

public class DemoFilter implements WebFilter {

      @Override
      public Mono<Void> filter(final ServerWebExchange serverWebExchange, final WebFilterChain webFilterChain) {

           WebSession webSession = serverWebExchange.getSession().block();

           webSession.getAttributes().put("attribute", attributeValue);

           return webFilterChain.filter(serverWebExchange);
      }
}
Run Code Online (Sandbox Code Playgroud)

我想删除该block()指令并以非阻塞方式获取会话,因此我尝试了以下操作:

public class DemoFilter implements WebFilter {

        @Override
        public Mono<Void> filter(final ServerWebExchange serverWebExchange, final WebFilterChain webFilterChain) {

            return serverWebExchange.getSession()
                .doOnNext(webSession -> {
                webSession.getAttributes().put("attribute", attributeValue);
                }).then(webFilterChain.filter(serverWebExchange));
        }
}
Run Code Online (Sandbox Code Playgroud)

在功能上,此代码与上面的代码相同,但它似乎导致会话在部署在测试环境中时不会关闭和累积(文件描述符警报)。

这是我的项目上下文:Spring Boot 2.0.0.RELEASE、Tomcat、Webclient 连接池已禁用(也导致会话未关闭)。

我在这个实现中做错了什么吗?很难找到比操作 HTTP 标头更多的 WebFilter 示例。

java spring spring-boot spring-webflux

5
推荐指数
0
解决办法
1927
查看次数

未使用 Webflux 生成 CSRF 令牌

我有一个由 Spring Security 保护的 Webflux 应用程序,其中默认启用 CSRF 保护。但是,我无法获取要保存在会话中的 CSRF 令牌。

经过一番调查,我注意到它可能来自WebSessionServerCsrfTokenRepository.class. 在这个类中,有一个generateToken方法应该从生成的 CSRF 令牌创建一个 Mono:

public Mono<CsrfToken> generateToken(ServerWebExchange exchange) {
        return Mono.fromCallable(() -> {
            return this.createCsrfToken();
        });
    }

private CsrfToken createCsrfToken() {
        return new DefaultCsrfToken(this.headerName, this.parameterName, this.createNewToken());
    }

    private String createNewToken() {
        return UUID.randomUUID().toString();
    }
Run Code Online (Sandbox Code Playgroud)

但是,即使该generateToken方法被 调用CsrfWebFilter,该createCsrfToken方法也永远不会被调用,并且我永远不会在会话中获取要保存的 CSRF 令牌。我的断点永远不会进入该createCsrfToken方法,这可能意味着它永远不会被订阅。

我正在Netty使用 Spring Boot2.1.0.RELEASE和 Spring Security 5.1.1.RELEASE

我在一个仅包含以下依赖项的空示例应用程序上重现了该问题:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-boot spring-webflux

1
推荐指数
1
解决办法
1956
查看次数