小编Bra*_*lle的帖子

如何跳过AngularJS中的OPTIONS预检请求

我开发了一个PhoneGap应用程序,现在正在转换为移动网站.除了一个小小的故障外,一切顺利.我通过POST请求使用某个第三方API,这在应用程序中运行良好,但在移动网站版本中失败.

仔细看后,似乎AngularJS(我猜浏览器实际上)是先发送一个OPTIONS请求.我今天学到了很多关于CORS的知识,但我似乎无法弄清楚如何完全禁用它.我无权访问该API(因此无法进行更改),但他们已将我正在处理的域添加到其Access-Control-Allow-Origin标头中.

这是我正在谈论的代码:

        var request = {
                language: 'fr',
                barcodes: [
                    {
                        barcode: 'somebarcode',
                        description: 'Description goes here'
                    }
                ]
            };
        }
        var config = {
            headers: { 
                'Cache-Control': 'no-cache',
                'Content-Type': 'application/json'
            }
        };
        $http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
            callback(undefined, data);
        }).error(function(data, status) {
            var err = new Error('Error message');
            err.status = status;
            callback(err);
        });
Run Code Online (Sandbox Code Playgroud)

如何阻止浏览器(或AngularJS)发送OPTIONS请求并跳转到实际的POST请求?我正在使用AngularJS 1.2.0.

提前致谢.

post cors angularjs

82
推荐指数
3
解决办法
10万
查看次数

重用CloudFormation标记列表

我有一套相当复杂的CloudFormation模板,用于配置我们基础架构的不同环境.但是我最近收到了使用相当广泛的标签列表(如15)标记创建的资源的请求.

将标签硬编码到每个模板文件中对我来说似乎不是一个好主意.我宁愿创建一次标记列表,并为每个可标记资源引用它们.问题是:我甚至不确定这是可能的.您是否知道可以实现可重复使用的标签列表?

我想写这个:

ECSAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties: 
        ...
        Tags: !Ref ElTags
Run Code Online (Sandbox Code Playgroud)

而不是

ECSAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties: 
        ...
        Tags: !Ref ElTags
            - Key: Name
              Value: !Join ["-", [!Ref EnvironmentName, 'ecs-as-group'] ]
              PropagateAtLaunch: true
            - Key: TEAM
              Value: !Ref TeamName
              PropagateAtLaunch: true
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation

10
推荐指数
2
解决办法
523
查看次数

让 SQS 死信队列与 Spring Boot 和 JMS 一起使用

我一直在开发一个从 Amazon SQS 接收消息的小型 Spring Boot 应用程序。但是我预见处理这些消息可能会失败,所以这就是为什么我认为添加死信队列是个好主意。

但是有一个问题:当处理失败时(我通过为某些消息抛出异常来强制执行)它不会在以后重新尝试并且不会移动到死信队列。我正在努力寻找问题,因为似乎没有太多信息。

但是,如果我查看Amazon 的文档,他们似乎能够做到,但不使用 Spring Boot 注释。有没有什么方法可以让下面的代码在不自己编写太多 JMS 代码的情况下工作?

这是我正在使用的当前配置。

@Configuration
public class AWSConfiguration {

    @Value("${aws.sqs.endpoint}")
    private String endpoint;

    @Value("${aws.iam.key}")
    private String iamKey;

    @Value("${aws.iam.secret}")
    private String iamSecret;

    @Value("${aws.sqs.queue}")
    private String queue;

    @Bean
    public JmsTemplate createJMSTemplate() {
        JmsTemplate jmsTemplate = new JmsTemplate(getSQSConnectionFactory());
        jmsTemplate.setDefaultDestinationName(queue);
        jmsTemplate.setDeliveryPersistent(true);
        jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);
        return jmsTemplate;
    }

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(getSQSConnectionFactory());
        factory.setConcurrency("1-1");
        return factory;
    }

    @Bean
    public JmsTransactionManager jmsTransactionManager() {
        return new JmsTransactionManager(getSQSConnectionFactory());
    }

    @Bean …
Run Code Online (Sandbox Code Playgroud)

jms amazon-sqs amazon-web-services spring-boot

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

如何更改Jenkins Declarative Pipeline环境变量?

我正在尝试创建一些Docker镜像.为此,我想使用Maven pom.xml文件中指定的版本号作为标记.然而,我对声明性Jenkins管道很新,我无法弄清楚如何更改我的环境变量,以便VERSION包含所有阶段的正确版本.

这是我的代码

#!groovy

pipeline {
    tools { 
        maven 'maven 3.3.9' 
        jdk 'Java 1.8' 
    }
    environment {
        VERSION = '0.0.0'
    }

    agent any 

    stages {
        stage('Checkout') { 
            steps {
                git branch: 'master', credentialsId: '290dd8ee-2381-4c5b-8d33-5631d03ee7be', url: 'git@gitlab.crosslang.local:company/SOME-API.git'
                sh "git clean -f && git reset --hard origin/master"
            }
        }
        stage('Build and Test Java code') {
            steps {
                script {
                    def pom = readMavenPom file: 'pom.xml'
                    VERSION = pom.version
                }
                echo "${VERSION}"
                sh "mvn clean install -DskipTests"
            }
        }
        stage('Build Docker images') { …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline

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

使用Java 3.0驱动程序检查MongoDB身份验证

我目前正在尝试使用(相对)新的3.0 Java驱动程序连接到MongoDB副本集.但是,我似乎无法捕获用户提供错误凭据时发生的MongoSecurityExceptions.这是我目前的代码.

try {
    MongoClientURI mongoClientURI = new MongoClientURI("mongodb://<user>:<password>@member1.com:27017/?authSource=db"
    this.mongoClient = new MongoClient(mongoClientURI);
}
catch(Exception e) {
    // TODO: some proper exception handling
    System.err.println(e.toLocalizedMessage());
}
Run Code Online (Sandbox Code Playgroud)

使用正确的凭据运行时,此代码可以正常工作,但在提供错误的凭据时,会在try-catch之外抛出异常.

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='<user>', source='<source>', password=<hidden>, mechanismProperties={}}
at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:61)
at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32)
at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:99)
at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:44)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

知道在哪里处理身份验证异常?

java mongodb

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

Spring Cloud Consul健康检查配置

我正在将 Spring Boot 应用程序作为 Docker 容器运行。到目前为止,这工作得很好,但是当我尝试使用 Spring Cloud Consul 时,它也让我有些头痛。它可以很好地从 Consul KVS 读取配置,但健康检查似乎正在运行。

默认运行状况检查使用 docker 容器的主机名,例如http://users-microservice/health。显然,从领事访问时这不会解决。

没问题,文档提到您可以在 bootstrap.yml 文件中使用healthCheckPath来配置它。这就是我现在所拥有的:

spring:
    application:
        name: users-microservice
    cloud:
        consul:
        host: myserver.com
        port: 8500
        config:
            prefix: API-CONFIG
            profileSeparator: '__'
        discovery:
            tags: users-microservice
            healthCheckPath: http://myserver.com:${server.port}/status
            healthCheckInterval: 30s
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个变量的使用方式似乎与我预期的非常不同。这就是领事试图达到的目标:

Get http://users:18090http//myserver.com:18090/status: dial tcp: unknown port tcp/18090http

我怎样才能解决这个问题?我应该设置一些未记录的配置参数吗?

spring-boot consul spring-cloud

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

SpotFleetRequest - 标签规范资源类型必须有一个值

在过去的几周里,我能够很好地创建 SpotFleetRequests(通过 Java)。但是从昨天开始我收到以下错误:

com.amazonaws.services.ec2.model.AmazonEC2Exception: Tag specification resource type must have a value (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: ef69f477-e8f3-4d86-aa91-1646c4067d68)
Run Code Online (Sandbox Code Playgroud)

我并没有真正改变任何东西,更奇怪的是:我已经在我的SpotFleetRequestConfigData的SpotFleetLaunchSpecification中添加了SpotFleetTagSpecification

这是我的代码:

List<Tag> tags = new ArrayList<>();
tags.add(new Tag("TEAM", "CROCODILE"));
SpotFleetTagSpecification tagSpec = new SpotFleetTagSpecification().withTags(tags);
SpotFleetLaunchSpecification launchSpec = new SpotFleetLaunchSpecification()
                .withSecurityGroups(new GroupIdentifier().withGroupId(securityGroupId))
                .withIamInstanceProfile(new IamInstanceProfileSpecification().withArn(instanceProfileArn))
                .withImageId(imageId)
                .withInstanceType(InstanceType.M3Xlarge)
                .withSubnetId(subnetIds)
                .withUserData(getUserDataToConfigureECSCluster(ecsClusterName))
                .withTagSpecifications(tagSpec);
// Configure the actual request
SpotFleetRequestConfigData config = new SpotFleetRequestConfigData()
                    .withIamFleetRole(fleetRoleArn)
                    .withLaunchSpecifications(launchSpec)
                    .withAllocationStrategy(AllocationStrategy.LowestPrice)
                    .withTargetCapacity(targetCapacity)
                    .withType(FleetType.Maintain)
                    .withClientToken(spotFleetToken);
RequestSpotFleetRequest request = new RequestSpotFleetRequest()
                    .withSpotFleetRequestConfig(config);
RequestSpotFleetResult …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services

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