小编And*_*niy的帖子

如何在Spring中获取Session对象?

我对Spring和Spring安全性比较陌生.

我试图编写一个程序,我需要使用Spring安全性在服务器端验证用户,

我想出了以下内容:

public class CustomAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider{
    @Override
    protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken)
                    throws AuthenticationException
    {
        System.out.println("Method invoked : additionalAuthenticationChecks isAuthenticated ? :"+usernamePasswordAuthenticationToken.isAuthenticated());
    }

    @Override
    protected UserDetails retrieveUser(String username,UsernamePasswordAuthenticationToken authentication) throws AuthenticationException 
    {
        System.out.println("Method invoked : retrieveUser");
        //so far so good, i can authenticate user here, and throw exception if not authenticated!!
        //THIS IS WHERE I WANT TO ACCESS SESSION OBJECT
    }
}
Run Code Online (Sandbox Code Playgroud)

我的用例是,当用户通过身份验证时,我需要放置一个属性,如:

session.setAttribute("userObject", myUserObject);
Run Code Online (Sandbox Code Playgroud)

myUserObject是某个类的对象,我可以跨多个用户请求访问整个服务器代码.

spring spring-mvc spring-security

83
推荐指数
3
解决办法
17万
查看次数

使用Spring Security 3.0设置会话超时期限

我正在使用Spring Security 3.0对LDAP服务器进行身份验证,我无法设法自己设置会话超时时间.我相信默认值是30分钟,但我需要将其设置为更长

java spring-security session-timeout

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

如何测试延迟加载的JPA集合是否已初始化?

我有一个从外部代码获取JPA实体的服务.在这个服务中,我想迭代一个延迟加载的集合,该集合是该实体的一个属性,以查看客户端是否相对于DB中的当前版本添加了一些内容.

但是,客户端可能从未触及过该集合,因此它仍未初始化.这导致众所周知

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.SomeEntity.

当然,如果客户从未触及过该集合,我的服务无需检查它是否有可能发生变化.问题是我似乎无法找到一种方法来测试集合是否已初始化.我想我可以打电话size()给它,如果它抛出LazyInitializationException我会知道,但我试图不依赖于这样的模式.

isInitialized()某处有某种方法吗?

java hibernate jpa lazy-loading

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

AWS lambda和Java并发

众所周知,AWS lambda 可能会重用早期创建的处理程序对象,而且确实如此(请参阅常见问题解答):

问:AWS Lambda会重用函数实例吗?

为了提高性能,AWS Lambda可以选择保留您的函数实例并重复使用它来提供后续请求,而不是创建新副本.您的代码不应该假设这总是会发生.


问题是关于Java并发性.如果我有一个处理程序的类,请说:

public class MyHandler {
    private Foo foo;
    public void handler(Map<String,String> request, Context context) {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,foo在这里访问和使用对象变量是否可以线程安全?

换句话说:AWS lambda可以同时为不同的调用使用相同的对象吗?

编辑我的函数在基于事件的源上处理,特别是它由API网关方法调用.

EDIT-2当你想要将某种连接池实现到外部资源时,这类问题就会出现,所以我想保持与外部资源的连接作为对象变量.它实际上按预期工作,但我害怕并发问题.

EDIT-3更具体地说,我想知道:AWS lambda处理程序的实例是否可以共享公共堆(内存)?我必须指定这个额外的细节,以防止回答列出有关java线程安全对象的明显和常见的事情.

java concurrency multithreading amazon-web-services aws-lambda

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

当JUnit 5没有assertThat()函数时,如何将Hamcrest与JUnit 5一起使用?

要将Hamcrest与JUnit 4一起使用,我们使用一个assertThat()函数.但是,JUnit 5不再具有assertThat()功能.如何在没有Hamcrest的情况下使用assertThat()

java hamcrest assertthat junit5

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

Java HashMap containsKey为现有对象返回false

我有一个用于存储对象的HashMap:

    private Map<T, U> fields = Collections.synchronizedMap(new HashMap<T, U>());
Run Code Online (Sandbox Code Playgroud)

但是,当试图检查密钥的存在时,containsKey方法返回false.
equalshashCode方法已实现,但找不到密钥.
调试一段代码时:

    return fields.containsKey(bean) && fields.get(bean).isChecked();
Run Code Online (Sandbox Code Playgroud)

我有:

   bean.hashCode() = 1979946475 
   fields.keySet().iterator().next().hashCode() = 1979946475    
   bean.equals(fields.keySet().iterator().next())= true 
   fields.keySet().iterator().next().equals(bean) = true
Run Code Online (Sandbox Code Playgroud)

fields.containsKey(bean) = false
Run Code Online (Sandbox Code Playgroud)

什么可能导致这种奇怪的行为?

public class Address extends DtoImpl<Long, Long> implements Serializable{

   <fields>
   <getters and setters>

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + StringUtils.trimToEmpty(street).hashCode();
    result = prime * result + StringUtils.trimToEmpty(town).hashCode(); …
Run Code Online (Sandbox Code Playgroud)

java hashmap containskey

30
推荐指数
3
解决办法
4万
查看次数

线程局部握手的解释

作为公认的一部分JDK 10JEP 312:线程局部握手提出.

我试图理解它的描述,但我仍然不相信我的想法是正确的.

它本质上是尝试恢复类似于弃用的Thread.destroy()的东西吗?

这个界面在理论上怎么样?

java multithreading java-threads java-10

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

如何将BigInteger转换为BigDecimal?

有没有办法将a转换BigIntegerBigDecimal

我知道你可以从a BigDecimal到a BigInteger,但是我找不到一种方法可以用Java来反过来.

java biginteger bigdecimal

28
推荐指数
3
解决办法
4万
查看次数

为什么clone()是复制数组的最佳方法?

这对我来说是一种耻辱,但我不知道:

您应该使用clone来复制数组,因为这通常是最快的方法.

正如Josh Bloch在本博客中所述:http://www.artima.com/intv/bloch13.html

我总是用System.arraycopy(...).这两种方法都是原生的,所以可能没有深入到我无法弄清楚的库的来源,为什么会如此.

我的问题很简单:为什么它是最快的方式? 有什么区别System.arraycopy这里 解释不同之处,但它没有回答为什么Josh Bloch认为clone()最快的方式.

java arrays clone copy

28
推荐指数
3
解决办法
3675
查看次数

"数组初始化程序需要一个明确的目标类型" - 为什么?

遵循JEP 286:局部变量类型推断描述

我想知道,引入这种限制的原因是什么,如:

Main.java:199: error: cannot infer type for local variable k

    var k = { 1 , 2 };
        ^   
(array initializer needs an explicit target-type)
Run Code Online (Sandbox Code Playgroud)

所以对我来说逻辑上它应该是:

var k = {1, 2}; // Infers int[]
var l = {1, 2L, 3}; // Infers long[]
Run Code Online (Sandbox Code Playgroud)

因为Java编译器已经可以正确地推断出数组的类型:

void decide() {
    arr(1, 2, 3);  // call  void arr(int ...arr)
    arr(1, 2L, 3); // call  void arr(long ...arr)
}

void arr(int ...arr) {
}

void arr(long ...arr) {
} …
Run Code Online (Sandbox Code Playgroud)

java arrays local-variables java-10

25
推荐指数
2
解决办法
892
查看次数