小编Sch*_*tod的帖子

Apache Shiro凭据基于Rest服务的安全性

我正在使用Shiro作为安全框架创建一个App.该应用程序有两个部分; 网络和休息.

网络正在使用Shiro的默认设置FormAuthenticationFilter.我对基于会话的方法感到满意.

使用Rest的独立应用程序,我想限制使用FormAuthenticationFilter和创建会话,我可以通过shiro.ini文件来完成

我需要在其余服务上实现基于凭据的安全性.

在网上浏览我看到一些博客建议你创建自己的Realm和过滤器来处理这种情况.但没有关于如何做到这一点的细节.

是否可以在Apache Shiro上实现基于凭据的安全性?如果有,是否有博客或教程向您展示如何实现这一目标?

问候

rest java-ee shiro

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

Gradle/Groovy语法和关键字

作为Gradle和Groovy的新手,我发现自己很难理解build.gradle脚本的语法.

我理解(至少我认为是这样)build.gradle是用作DSL的普通groovy代码,其中关键字在别处定义.

请解释一下不同的部分.摘自教程:

defaultTasks 'distribution'

task distribution << {
    println "We build the zip with version=$version"
}

task release(dependsOn: 'distribution') << {
    println 'We release now'
}

gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(release)) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我知道println是一个功能.我知道引号中的文字是一个字符串.我想花括号中的东西是封闭的.但什么是发布/*发行*?它也是一个字符串吗?它是函数任务的参数吗?为什么我可以在hasTask(release)中使用它而不带引号?

那么exacly 什么:'defaultTasks','task','release','<<','gradle','whenReady',' - >'?

额外奖励:有没有一种常规方法可以找到自己?

groovy gradle

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

Java Generics无法转换Type in Type

我遇到这个问题:

public class Test {

    static class TestType {}

    static class Pair<A,B>{}

    public static void main( String [] args ) throws Exception {

        Collection<? extends TestType> val = null;

        List<? extends TestType> single = 
            testSingle( val ); // OK

        Pair<String,List<? extends TestType>> pair = 
            testPair( val ); // ERROR

    }

    static <T extends TestType> List<T> testSingle( Collection<T> val ){
        return null;
    }

    static <T extends TestType> Pair<String,List<T>> testPair( Collection<T> val ){
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

为什么第一个工作而第二个不工作?

错误消息ist:

Type mismatch: cannot …
Run Code Online (Sandbox Code Playgroud)

java generics

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

重新审视css背景图案精灵

使用css sprite作为图标风格的图像是最好的做法,现在非常简单.

在一个图像中使用多个重复背景传统上只有在它们仅使用垂直或水平重复时才可能.

或者是吗?与css3和html5以及所有东西相比,有没有办法在一个css精灵中组合多个背景图像来制作背景图案并使用垂直和水平重复?

编辑/注意:我知道这不是第一次提出这样的问题.但我发现的大多数/所有答案都是前一段时间.我只是想知道今天是否有解决方案.

编辑:说明我正在寻找的内容:http://ibin.co/21LqyJvnGdMB

html css sprite

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

找出Java 8流过滤器是否已过滤某些内容的优雅方法

我有一个从数据库ListItem获取的。

我做类似的事情:

List<Item> list;
list.stream()
    .filter( i -> i.condition() )
    .mapToLong( Item::asLong )
    .sum()
    ;
Run Code Online (Sandbox Code Playgroud)

现在,我想知道过滤器是否过滤掉了某些东西,因此可以从不再需要它的数据库中删除它。

我可以做:

List<Item> list2 = list.stream()
    .filter( i -> i.condition() )
    .collect( Collectors.toList() )
    ;

int theSizeIWant = list2.size();

list2.stream().mapToLong( Item::asLong )
     .sum()
     ;
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个不需要创建中间列表的更优雅的解决方案。

java java-8 java-stream

5
推荐指数
2
解决办法
4462
查看次数

Python:迭代shell命令结果的好方法

是否有一种"好的"方法来迭代shell命令的输出?

我正在寻找类似以下内容的python:

ls | while read file; do
    echo $file
done
Run Code Online (Sandbox Code Playgroud)

请注意,'ls'只是shell命令的一个示例,它将返回多个行的结果,因为'echo'只是:用它做一些事情.

我知道这些替代方案:在Python中调用外部命令但我不知道使用哪一个或者是否有一个"更好"的解决方案.(事实上​​,"更好"是这个问题的主要焦点.)

这是用python替换一些bash脚本.

python shell command exec

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

流收集与地图收集

Stream特别是在处理可以这种或那种方式写入的数值时,有一些方法.(同样的问题适用于average())

那么哪种方法更可取:

DoubleSummaryStatistics result;

result = stream()
        .collect( Collectors.summarizingDouble( weighter::weight ) );
Run Code Online (Sandbox Code Playgroud)

result = stream()
        .mapToDouble( weighter::weight )
        .summaryStatistics();
Run Code Online (Sandbox Code Playgroud)

为什么?

(正如我所看到的,第一个具有"访问"每个元素只有一次的优势,而第二个具有更清晰的语义但是至少访问每个元素两次.但这是否重要/正确?)

java java-8 java-stream

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

整数到随机数的稳定映射

我需要一个稳定快速的整数到随机数的单向映射函数。“稳定”是指相同的整数应始终映射到相同的随机数。我所说的“随机数”实际上是指“一些表现得像随机的数字”。

例如

1 -> 329423
2 -> -12398791234
3 -> -984
4 -> 42342435
...
Run Code Online (Sandbox Code Playgroud)

如果我有足够的内存(和时间),我最好使用:

for( int i=Integer.MIN_VALUE; i<Integer.MAX_VALUE; i++ ){
    map[i]=i;
}
shuffle( map );
Run Code Online (Sandbox Code Playgroud)

我可以使用一些安全的散列函数,如 MD5 或 SHA,但这些函数会降低我的目的,而且我不需要任何加密/安全属性。

我只需要一种方式。所以我永远不必将随机数转换回它的整数。

背景:(对于想了解更多的人)

我打算使用它在给定的时间内使完整的缓存无效。随着时间的流逝,无效化是在访问缓存成员时“随机”完成的,机会增加。我需要它保持稳定,以便 isValid( entry ) 不会“闪烁”并进行一致的测试。此函数的输入将是条目键的 java 哈希值,通常在“1000”-“15000”范围内(但也可以包含一些其他内容)并且成批出现。失效是在以下条件下完成的:

elapsedTime / timeout * Integer.MAX_VALUE > abs( random( key.hashCode() ) )
Run Code Online (Sandbox Code Playgroud)

编辑:(这是一个评论,所以我把它放在这里)

我尝试了 gexicide 的答案,结果发现这不够随机。这是我尝试过的:

        for( int i=0; i<12000; i++ ){

            int hash = (""+i).hashCode();

            Random rng = new Random( hash );
            int random …
Run Code Online (Sandbox Code Playgroud)

java random prng

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

c:更改变量类型而不进行强制转换

我正在将uint32_t更改为float但不更改实际位.

只是为了确定:我不想施展它.那么float f = (float) i是什么我wan't做的,因为它改变了位正好相反.

我将使用它将我的(伪)随机数转换为浮点数,而不进行不必要的数学运算.

我目前正在做什么,已经在做什么是这样的:

float random_float( uint64_t seed ) {

    // Generate random and change bit format to ieee
    uint32_t asInt = (random_int( seed ) & 0x7FFFFF) | (0x7E000000>>1);

    // Make it a float
    return *(float*)(void*)&asInt; // <-- pretty ugly and nees a variable
}                                                                      
Run Code Online (Sandbox Code Playgroud)

问题:现在我想摆脱asInt变量,我想知道是否有更好/不那么丑陋的方式然后获取此变量的地址,将其转换两次并再次取消引用它?

c types casting

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

Java:压缩一个HashMap(类似于ArrayList#trimToSize)

有没有办法压缩HashMap,你可以通过其trimToSize()方法使用ArrayList?

我能想到的一种方法是遍历当前地图中的所有条目并填充新的条目,然后用新的条目替换原始条目.

有没有更好的方法来实现这一目标?

java memory collections hashmap

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

Java/Nashorn将一个函数放在绑定/全局范围内

我有一个静态方法,如:

some abstract class C {
    void dump( Object o ) {
}
Run Code Online (Sandbox Code Playgroud)

我想传递给js,我可以直接在全球范围内使用它,如:

js> dump( new Something() );
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现的唯一方法是创建一个像

public class CStub {
    void dump( Object o ){ C.dump( o ); }
}
Run Code Online (Sandbox Code Playgroud)

把它放在nashorn通过:

engine.put( "stub", new CStub() );
Run Code Online (Sandbox Code Playgroud)

然后在js中:

js> var dump = stub.dump
Run Code Online (Sandbox Code Playgroud)

但是还有另一种方法,它不涉及存根创建并将方法直接放在全局范围内?

java scope nashorn

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

javascript在字符串中交换字符

假设我有一个字符串"abcabcabc",我想要'a'和'b'的位置,以便我最终得到"bacbacbac".对此最优雅的解决方案是什么?(为了这个问题,我特此将'优雅'定义为快速和可读.)

我想出来了

"abcabcabc".replace( /[ab]/g, function( c ){ return { 'a': 'b', 'b': 'a' }[ c ] } )
Run Code Online (Sandbox Code Playgroud)

这既不快也不可读.但现在我想知道是否有更好的方法呢?

编辑:角色可以在任何位置.所以答案应该适用于"xyza123buvwa456"(也就是"xyzb123auvwb456").

编辑2:"交换"似乎是错误的词.将所有a替换为b,将所有b替换为a,两者都是单个字符.


我扔了几个其他的:

"abcabcabc".replace( 'a', '_' ).replace( 'b','a' ).replace( '_', 'b' )

"abcabcabc".replace( /[ab]/g, function( c ){ return "ba".charAt( c.charCodeAt()-'a'.charCodeAt() ); } )

"abcabcabc".replace( /[ab]/g, function( c ){ return "ab".charAt( "ba".indexOf( c ) ) } )
Run Code Online (Sandbox Code Playgroud)

我最终使用了Mark C.的修改版本答案:

"abcabcabc".replace( /[ab]/g, c => c == 'a' ? 'b' : 'a' )
Run Code Online (Sandbox Code Playgroud)

javascript string

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