小编geo*_*e_h的帖子

为什么contains()方法在Java中的非空字符串中找到空字符串

这是我在Java String.indexOf()String.contains()方法中发现的奇怪行为.如果我有一个非空字符串说blablabla,我试图在其中寻找一个空字符串,它总是返回,true而我希望它返回false.

所以基本上,为什么下面的代码返回true和0?

String testThis = "";
String fileName = "blablablabla";
System.out.println(fileName.contains(testThis));
System.out.println(fileName.indexOf(testThis));
Run Code Online (Sandbox Code Playgroud)

逻辑上(至少对我来说)""并没有发生,blablablabla但是indexOf("")说它确实如此,为什么?

java string

16
推荐指数
2
解决办法
9191
查看次数

如何使用spring-security-saml2配置服务提供者以使用EncryptedAssertions?

我正在使用这个出色的repo vdenotaris / spring-boot-security-saml-sample作为指南,并且尝试将其设置为验证和解密包含的传入SAML消息EncryptedAssertion

idP的元数据定义XML中的签名和加密密钥。这是在服务提供商中设置的。

@Bean
public ExtendedMetadata extendedMetadata() {
    ExtendedMetadata extendedMetadata = new ExtendedMetadata();
    extendedMetadata.setIdpDiscoveryEnabled(false);
    extendedMetadata.setSignMetadata(false);
    extendedMetadata.setEcpEnabled(true);
    return extendedMetadata;
}

@Bean
@Qualifier("metadata")
public CachingMetadataManager metadata() throws MetadataProviderException {
    List<MetadataProvider> providers = new ArrayList<MetadataProvider>();

    try {
        ClasspathResource metadata = new ClasspathResource("/metadata/the-idp-metadata.xml");
        Timer timer = new Timer(true);
        ResourceBackedMetadataProvider provider = new ResourceBackedMetadataProvider(timer, metadata);
        provider.setParserPool(ParserPoolHolder.getPool());
        provider.initialize();

        ExtendedMetadataDelegate exMetadataDelegate = new ExtendedMetadataDelegate(provider, extendedMetadata());
        exMetadataDelegate.setMetadataTrustCheck(true);
        exMetadataDelegate.setMetadataRequireSignature(false);
        providers.add(exMetadataDelegate);
    }
    catch(ResourceException ex) {
        throw new MetadataProviderException(ex.getMessage(), ex);
    }

    CachingMetadataManager cmm = new CachingMetadataManager(providers); …
Run Code Online (Sandbox Code Playgroud)

java spring-security saml-2.0 spring-boot spring-security-saml2

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

使用mocha和sinon在节点中模拟http请求

我已经使用express编写了一个NodeJS应用程序,代理了对外部API的一些调用.所以我正在尝试使用Mocha和Sinon编写单元测试.我的目标是测试应用程序没有任何互联网连接,所以我试图模拟https请求并返回模拟回复.

我遇到了一个问题,我无法找到适合我案例的任何示例或教程.我的节点应用程序在端口8081上侦听http请求,然后将它们代理到另一个站点.我想测试我的应用程序而不必将请求实际发送到那些外部服务器.我在下面尝试它,我把我要发送的json回复发送回server.respondsWith()函数.

我是否通过与chai进行ajax调用以正确的方式进行此操作?或者我应该以某种方式在我的应用程序内发送请求.任何帮助表示赞赏.

var assert = require('assert');
var chai = require('chai');
var spies = require('chai-spies');
var chaiHttp = require('chai-http');
var https = require('https');
var should = chai.should();
var expect = chai.expect;
var sinon = require('sinon');

chai.use(spies);
chai.use(chaiHttp);

describe('Car Repository', function() {
  var server;
  before(function() {
    server = sinon.fakeServer.create();
  });

  after(function() {
    server.restore();
  });

  var url = 'http://127.0.0.1:8081';
  it('should succeed and return a list of cars', function(done) {
    server.respondWith('POST', 'https://api.sandbox.cars.com/v2/token_endpoint', JSON.stringify({"access_token":"1t3E4IykfpJAbuFsdfM2oFAo5raB5vhfOV0hAYe","token_type":"bearer","expires_in":604800}));
    server.respondWith('GET', url+'/cars', JSON.stringify({'test':'this works'}));

    chai.request(url)
      .get('/cars')
      .end(function(err, res) {
        if …
Run Code Online (Sandbox Code Playgroud)

unit-testing http mocha.js node.js sinon

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

如何替换不在JavaScript的href标记内的URL

我遇到的情况是我的文本包含URL链接。链接有2种形式

  1. www.stackoverflow.com
  2. <a href="http://www.stackoverflow.com">堆栈溢出</a>

我正在尝试创建一个使用正则表达式的简单函数,该函数将使用HREF标签包装所有类型为1的链接,而将其他已经包装好的链接保留为孤独。

我有这样的事情,但没有成功。

function replaceURLWithHTMLLinks(text) {
    var exp = /(<(\s*)a(\s)*href.*>.*<\/(\s)*a(\s*)>)/ig;
    var matches = exp.exec(text);
    for(var i=0; i < matches.length; i++) {
        var line = matches[i];
        if(!exp.test(line)) {
            var exp2 = /(\b(?:(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[-A-Z0-9+&@#\/%=~_|$])|”(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[^"\r\n]+”?|’(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[^'\r\n]+’?)/ig;
            text = text.replace("http://","");
                text = text.replace(exp2, "<a href=http://$1>$1</a>");
        }
    }

    return text;
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,但希望有人可以解决它:)

编辑

通过@MikeM答案修复它的解决方案

function replaceLinksSO(text) {
    rex = /(<a href=")?(?:https?:\/\/)?(?:(?:www)[-A-Za-z0-9+&@#\/%?=~_|$!:,.;]+\.)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;]+/ig;   
    return text.replace(rex, function ( $0, $1 ) {
        if(/^https?:\/\/.+/i.test($0)) {
            return $1 ? $0: '<a href="'+$0+'">'+$0+'</a>';
        }
        else {
            return $1 …
Run Code Online (Sandbox Code Playgroud)

javascript regex regex-negation

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