小编Cod*_*y S的帖子

Java正则表达式:否定前瞻

我正在尝试制作两个匹配URI的正则表达式.这些URI的格式为:/foo/someVariableData/foo/someVariableData/bar/someOtherVariableData

我需要两个正则表达式.每个都需要匹配一个而不是另一个.

我最初提出的正则表达式是: /foo/.+/foo/.+/bar/.+.

我认为第二个正则表达式很好.它只匹配第二个字符串.然而,第一个正则表达式匹配两者.所以,我开始玩(第一次)负向前瞻.我设计了正则表达式/foo/.+(?!bar)并设置以下代码来测试它

public static void main(String[] args) {
    String shouldWork = "/foo/abc123doremi";
    String shouldntWork = "/foo/abc123doremi/bar/def456fasola";
    String regex = "/foo/.+(?!bar)";
    System.out.println("ShouldWork: " + shouldWork.matches(regex));
    System.out.println("ShouldntWork: " + shouldntWork.matches(regex));
}
Run Code Online (Sandbox Code Playgroud)

当然,他们两个都决心true.

谁知道我做错了什么?我不需要使用Negative lookahead,我只需要解决问题,我认为负面的预测可能是一种方法.

谢谢,

java regex negative-lookahead regex-lookarounds

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

如何使用Curator检查Zookeeper中是否存在路径?

我目前处于开发的早期阶段,将Zookeeper的东西集成到我的应用程序中.我正在使用Netflix的Curator作为处理Zookeeper的API.我得到了大部分的要点(比如添加ZNodes和诸如此类的东西).

但是你怎么检查ZNode是否存在?看起来像它的代码是:

client.checkExists().forPath(path);
Run Code Online (Sandbox Code Playgroud)

... ... client的实例在哪里com.netflix.curator.framework.CuratorFramework

但是,此调用返回一个org.apache.zookeeper.data.Stat对象.

使用此对象,如何判断路径是否存在?

谢谢

java apache-zookeeper apache-curator

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

Java AES:没有安装的提供程序支持此密钥:javax.crypto.spec.SecretKeySpec

我正在尝试设置128位AES加密,并且我在Cipher.init上抛出异常:

No installed provider supports this key: javax.crypto.spec.SecretKeySpec

我正在使用以下代码在客户端生成密钥:

private KeyGenerator kgen;
try {
        kgen = KeyGenerator.getInstance("AES");
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    kgen.init(128);
}
SecretKey skey = kgen.generateKey();
Run Code Online (Sandbox Code Playgroud)

然后,此密钥将作为标头传递给服务器.使用此函数进行Base64编码:

public String secretKeyToString(SecretKey s) {
        Base64 b64 = new Base64();
        byte[] bytes = b64.encodeBase64(s.getEncoded());
        return new String(bytes);
}
Run Code Online (Sandbox Code Playgroud)

服务器拉出标题,然后执行

protected static byte[] encrypt(byte[] data, String base64encodedKey) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    Cipher cipher;
    try {
        cipher = Cipher.getInstance("AES");
    } catch (NoSuchAlgorithmException ex) {
        //log …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography aes secret-key

12
推荐指数
2
解决办法
3万
查看次数

在my.cnf中忽略了expire_logs_days

我有一对为主从复制设置的MySQL数据库.奴隶做得很好.

另一方面,尽管我做了最好的(自动化)努力,但主人仍在囤积二进制日志.

我正在尝试在MySQL的my.cnf文件中设置'expire_logs_days'变量,但由于某种原因它似乎被忽略了.我的my.cnf文件看起来像:

[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1

[mysqld_safe]
...
Run Code Online (Sandbox Code Playgroud)

但是当我SHOW VARIABLES WHERE Variable_Name='expire_logs_days'在MySQL中运行时,它会返回一个值0

我试过了:

  • 重启MySQL
  • 使用此行: expire_logs_days='3'
  • 检查其他my.cnf文件:
    • mysqld --help --verbose | grep cnf
    • 找到了这条线: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
    • 我的my.cnf档案位于/etc/my.cnf
    • 在其他位置没有名为my.cnf的文件
  • SET GLOBAL expire_logs_days=3 在MySQL中工作,但本身并没有真正解决我的问题

这就是我能想到的所有事情.我已经运行了手动PURGE命令,它运行得很好,但是我更喜欢(尽管如果没有办法,我还是会这样做)不使用cron运行PURGE命令.

有人有什么想法吗?我只是轻拍.

谢谢.

mysql database-replication

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

.rar和.tar缺少Mime类型

Javascript(Windows 8.1,Firefox)似乎没有.tar文件或.rar文件的mime类型(也许还有其他;这些是我发现的唯一两个).那是怎么回事?有什么我可以用来解决这个问题吗?我真的希望能够为这些文件类型检索mime类型,而不需要做一些奇怪的扩展黑客攻击.

我做了一个小提琴来证明这个问题:http://jsfiddle.net/kungfujoe/jd8h7wvs/

如果浏览到.txt或.docx或许多其他格式,则会成功提取类型.但是,.tar和.rar都不会拉它们.奇怪,对吧?

(下面的JSFiddle代码)

HTML

<input id='button' type='file' name='file'/>
<div id='out'>Output Goes Here</div>
Run Code Online (Sandbox Code Playgroud)

Javascript(使用JQuery 2.1.0)

$('#button').unbind('change');
$('#button').bind('change', function () {
    if(this.files[0] !== undefined && this.files[0] !== null) {
        document.getElementById("out").innerHTML = "Type is " + this.files[0].type.toString();        
    } else {
        throw "Error"
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑

1)更新了问题,以反映在Windows 8.1 Firefox上观察到的问题.Chrome有tar文件的mime类型,但不是rar文件.

2)向小提琴添加了jQuery

javascript jquery mime-types

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

android.util.Base64编码/解码标志参数

根据Javadoc,android.util.Base64.decode()有两个参数:text和"flags".这些标志是int形式的(我引用):

flags controls certain features of the decoded output. Pass DEFAULT to decode standard Base64.

首先,感谢任何人决定写一个模糊的Javadoc.我看到Base64有一些枚举字符串,实际上,我们一直使用Base64.NO_WRAP作为我们的标志.但是,在这个特定的实例中,我们需要使用两个标志:NO_WRAP和URL_SAFE.

我们如何指定两个标志?我们尝试用管道('|')分隔它们,但没有这样做.

import android.util.Base64;
public class Foo {
    public static void main(String[] args) {
        String urlSafeBase64EncodedString = getUrlSafeBase64EncodedString();
        int flags = ????????; //Need both Base64.NO_WRAP and Base64.URL_SAFE
        String decodedString = Base64.decode(urlSafeBase64EncodedString, flags);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间.

java base64 android

9
推荐指数
2
解决办法
2万
查看次数

用于/ deploy的Tomcat 7 tomcat-users manager-script示例

我正在尝试让我的新安装的Tomcat 7.0.34上的管理器/部署工作,但是当我尝试通过执行PUT进行部署时,我一直得到403 http://localhost:8080/manager/deploy.我还没有在Tomcat 7中使用它.

的conf/server.xml中

<?xml version='1.0' encoding='utf-8'?>
<Server>
...
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service>
  ...
    <Engine>
    ...
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
    </Engine>
  </Service>
</Server>
Run Code Online (Sandbox Code Playgroud)

CONF/Tomcat的users.xml中

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <user username="tomcat" password="redacted" roles="manager-script"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)

我也尝试过(结果相同)

CONF/Tomcat的users.xml中

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <role rolename="manager-script"/>
    <user username="tomcat" password="redacted" roles="manager-script"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)

是的,我有两倍,三倍,四倍检查我正在使用正确的用户名和密码,如tomcat-users.xml中所定义.我以为这就是我所需要的.有任何想法吗?

tomcat tomcat7

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

Apache POI:部分单元格字体

如果我破解MS Excel(我假设)或LibreOffice Calc(测试),我可以在单元格中输入内容,并在单元格中更改单元格中文本部分的字体,例如在一个单元格中执行:

此文本为粗体,此文本为斜体

再次,让我重申一下,这个字符串可以在一个单元格中以所示格式存在.

可以使用Apache POI实现这种级别的自定义吗?仅搜索似乎显示如何将字体应用于整个单元格.

谢谢

=== UPDATE ===

如下所示,我最终使用HSSFRichTextString(因为我正在使用HSSF).但是,在应用字体后(我尝试使用粗体和下划线),我的文本将保持不变.这就是我的尝试.为了把事情放在上下文中,我正在研究与运动相关的事情,其中​​通常以"awayteam"@"hometeam"的形式显示匹配,并且根据某些外部条件,我想制作一个或者另一个大胆.我的代码看起来像这样:

    String away = "foo";
    String home = "bar";
    String bolden = "foo"
    HSSFRichTextString val = new HSSFRichTextString(away+"@"+home);

    if(bolden.equals(home)) {
        val.applyFont(val.getString().indexOf("@") + 1, val.length(), Font.U_SINGLE);
    } else if(bolden.equals(away)) {
        val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE);
    }
    gameHeaderRow.createCell(g + 1).setCellValue(val);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是一个代码片段来自一个比显示的更复杂的函数,但最重要的是实际代码.如您所见,我正在将val.applyFont作为字符串的一部分,然后使用字符串设置单元格值.所以我不完全确定我在那里做错了什么.任何建议表示赞赏.

谢谢

KFJ

apache excel apache-poi

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

如何将值动态加载到Tomcat的Context XML文件中

鉴于Tomcat的Context XML文件往往包含敏感信息(通常包括连接到数据库所需的凭据),我如何从纯文本context.xml以外的源动态加载这些值?

java mysql tomcat

5
推荐指数
3
解决办法
8164
查看次数

我可以从IE11中的Web Worker访问MSCrypto吗?

IE11的Web Crypto位于其中window.msCrypto,而对于Firefox或Chrome,它可以访问window.crypto.

Web Workers无法访问window上下文,但幸运的是,Chrome和Firefox还在cryptoWeb Worker上下文中公开了变量(因此,在全局级别,您可以使用this.cryptoWeb Worker中的Web Crypto套件).不过,看来,这IE11并没有暴露this.msCrypto在他们的Web工作环境.

那是对的吗?有没有办法在IE11 Web Worker中使用Web Crypto?

javascript web-worker internet-explorer-11 webcrypto-api

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

Tomcat JDBC与DataSource领域

对于testapp在web.xml中具有以下内容的webapp (除其他外)

<security-constraint>
    <web-resource-collection>
        <web-resource-name>My JSP</web-resource-name>
        <url-pattern>*.secured</url-pattern>
        <url-pattern>/login</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>

    <auth-constraint>
        <role-name>mobileusers</role-name>
    </auth-constraint>
    <!--
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    -->
</security-constraint>

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>Identity</realm-name>
</login-config>

<security-role>
    <description>
        No Description
    </description>
    <role-name>mobileusers</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

考虑以下两个Tomcat领域配置:

配置1 - JDBC领域:

.../webapps/testapp/META-INF/context.xml

<Realm  className="org.apache.catalina.realm.JDBCRealm" 
        driverName="com.mysql.jdbc.Driver"
        connectionName="mysqluser"
        connectionPassword="redacted"
        connectionURL="jdbc:mysql://192.168.1.5/testdb?autoReconnectForPools=true&amp;characterEncoding=UTF-8"
        digest="MD5"
        userTable="Users" 
        userNameCol="name" 
        userCredCol="password"
        userRoleTable="Users" 
        roleNameCol="roleName"
/>
Run Code Online (Sandbox Code Playgroud)

配置2 - DataSource领域:

.../webapps/testapp/META-INF/context.xml:

<Realm  className="org.apache.catalina.realm.DataSourceRealm" 
        digest="MD5"
        userTable="Users" 
        userNameCol="name" 
        userCredCol="password"
        userRoleTable="Users" 
        roleNameCol="roleName"
        dataSourceName="jdbc/testDB"
/>
Run Code Online (Sandbox Code Playgroud)

并在.../conf/context.xml:

<Resource 
    name="jdbc/testDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    removeAbandoned="true" 
    removeAbandonedTimeout="15" 
    maxActive="5" 
    maxIdle="5" 
    maxWait="7000" …
Run Code Online (Sandbox Code Playgroud)

tomcat digest-authentication jdbcrealm

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

为什么Netbeans抱怨同步调用被包含条件?

说我有一些像这样的代码:

private static Thing t = null;
private static final Object lock = new Object();   

public static void foo() {
    if(t == null) { //Netbeans warning on this line.
        synchronized(lock) {
            if(t == null) {
                t = new Thing();
            }
        }
    }
    ...Do stuff with t...
}
Run Code Online (Sandbox Code Playgroud)

现在,foo托管在服务器上,可能会被许多用户同时调用.函数foo的目的是初始化t,如果它还没有,否则,使用初始化的实例来做任何需要完成的事情.

但是,Netbeans在这样的代码上给了我一个警告:

Remove the outer conditional statement

使用工具提示:

Double-checked locking

双重检查锁定的目的是避免等待人们释放锁定的瓶颈.如果只检查t是否为null,那么每个人都必须等待机会查看t是否为null,并且每个人-1都会有效地等待(因为t不会为null) .因此外在条件.

有了它,比如说,通过一些奇迹,5个人同时将t == null解析为true.一个用户将获得同步锁,看到t == null仍然是真的,并初始化它.然后,该用户将释放锁定,下一个用户将锁定它,并几乎立即释放它(因为t!= null),这将继续,直到5个用户通过它.一直以来,其他用户连接跳过同步锁,作为第一个用户做了t!= null.

那么,为什么Netbeans抱怨?这似乎是做AFAIK的最好方法.

思考?

java synchronization netbeans locking synchronized

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

Bash脚本运行最新版本的文件?

我正在使用Apache Maven将我们的产品发布到Production,截至目前,创建的生成的jar文件没有附加版本号.我想附加当前的pom.xml版本号(我知道该怎么做),但是我需要安装程序脚本(基本上是带有额外参数的java -jar命令)来默认访问最新版本的安装程序.

说我的部署文件被调用foo.jar.我的脚本基本上是java -jar foo.jar

相反,我想我的部署目录包含foo-4.0.0.jar,foo-4.0.1.jar,foo-4.0.2.jar,等.

我想创建一个运行最高版本foo的bash脚本.

我看过按创建日期排序,但我可以立即想到可能效果不佳的场景.我已经考虑过修改日期,然后手动touch输入我想要安装的文件,但这个想法也很糟糕.

显然,我需要拆分名称(可能使用正则表达式)并隔离版本号(可能是最后一个破折号的子字符串和名称中的最后一个句点?)并以某种方式对它们进行排序.排序可能是我最关心的问题......并重新关联文件.

如果这太复杂了,理论上我可以创建一个Java文件来实现这一点(我的主要语言是Java吗?),但理想情况下它只是一个bash脚本.

谢谢

java regex bash maven

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