小编Jua*_*ega的帖子

使用Spring OAuth在Cookie中存储来自OAuth2服务器的令牌

Spring OAuth2是否提供了使用opaque或JWT令牌创建cookie的配置?到目前为止,我在Internet上找到的配置描述了为其创建授权服务器和客户端.在我的例子中,客户端是一个网关,Angular 4应用程序位于同一可部署的顶部.前端向网关发出请求,通过Zuul路由它们.使用@EnableOAuth2Sso,application.yml和WebSecurityConfigurerAdapter 配置客户端会生成所有必要的请求和重定向,将信息添加到SecurityContext但将信息存储在会话中,并将JSESSIONID cookie发送回UI.

是否需要任何配置或过滤器来创建带有令牌信息的cookie,然后使用我可以使用的无状态会话?或者我是否必须自己创建它,然后创建一个查找令牌的过滤器?

    @SpringBootApplication
    @EnableOAuth2Sso
    @RestController
    public class ClientApplication extends WebSecurityConfigurerAdapter{

        @RequestMapping("/user")
        public String home(Principal user) {
            return "Hello " + user.getName();
        }

        public static void main(String[] args) {
            new SpringApplicationBuilder(ClientApplication.class).run(args);
        }

        @Override
        public void configure(HttpSecurity http) throws Exception {
            http
                    .antMatcher("/**").authorizeRequests()
                    .antMatchers("/", "/login**", "/webjars/**").permitAll()
                    .anyRequest()
                    .authenticated()
                    .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        }
    }


    server:
      port: 9999
      context-path: /client
    security:
      oauth2:
        client:
          clientId: acme
          clientSecret: acmesecret
          accessTokenUri: http://localhost:9080/uaa/oauth/token
          userAuthorizationUri: http://localhost:9080/uaa/oauth/authorize
          tokenName: access_token
          authenticationScheme: query
          clientAuthenticationScheme: form
        resource:
          userInfoUri: http://localhost:9080/uaa/me

Run Code Online (Sandbox Code Playgroud)

spring-security spring-oauth2

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

使用 @Configuration bean 覆盖 @FeignClient 进行测试

是否可以通过@FeignClient创建@Configuration包含模拟版本的 bean 进行测试来覆盖通过注释创建的bean?

我已经尝试过了,但似乎@FeignClientbean 是最后创建的(或者我认为是这样),因为在我的测试中,我总是注入真实版本而不是模拟版本。在同一个配置文件中,我创建了另一个没有任何注释(除了@Component)的bean,通过使用真实的名称以相同的方式模拟,并且它完美地工作。

我试过用@MockBean它来模拟它并且它有效,但该项目有一些怪癖,这使得创建另一个 Spring 上下文破坏了测试。

谢谢。

编辑。实际上,我只是调试了测试并意识到,如果我使用与 Feign 客户端相同的名称,调试器甚至不会在@Configurationbean 中停下来创建模拟版本。将名称更改为其他名称可以正常工作,但它只会使用新名称创建另一个相同类型的 bean。我在这里缺少任何配置吗?

编辑 2. 这是一个示例代码。执行这个我有那个BarService是模拟版本,但FooService它是真实的。

@FeignClient(name = "fooService")
public interface FooService {
}

@Component
public class BarService {
}

@Configuration
public class ConfigClass {

  @Bean
  public FooService fooService() {
    return Mockito.mock(FooService.class);
  }

  @Bean
  public BarService barService() {
    return Mockito.mock(BarService.class);
  }

@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest
public class TestClass {

  @Autowired
  private FooService fooService;

  @Autowired …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing mockito feign

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

使用最后一种方法实现 Treeset 上的并发

我想实现一个 bean,其中我有一个TreeSet按排序顺序存储整数的 bean。使用此方法的唯一方法TreeSetaddValue向集合中添加一个新整数,以及使用中的getHighestValue方法返回集合中的最后一个值。last()SortedSet

这里有并发问题吗?我没有使用任何显式迭代器,因此在获取最高值时不应该出现任何并发问题,但我不知道如果ConcurrentModificationException两个线程尝试添加并获取最高值,最后一个方法是否会抛出任何或任何其他异常同一时间。

java collections concurrency

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

SNS 消息是否分散到 SQS 队列以保持顺序?

SNS 的 AWS 常见问题说:

问:消息会按照发布的确切顺序发送给我吗?

Amazon SNS 服务将尝试按照消息发布到主题的顺序传送来自发布者的消息。但是,网络问题可能会导致订阅者端出现乱序消息。

它是否适用于 SQS 消费者,特别是 FIFO SQS?我有一个用例,其中一个消费者需要维护发送消息的顺序。如果不是这种情况,我将需要使用其他东西。

fifo amazon-sqs amazon-web-services amazon-sns

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