Spring 安全上下文和@Repository bean



从 Bean 访问 Spring 安全上下文@Repository安全吗?

假设我们有一些@Repository

public interface FooRep {
Foo getFoo();
}
@Repository
public class FooRepImpl {    
public Foo getFoo() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return (Foo)authentication.getDetails();
}
}

它被包装到服务层中:

public interface FooService {
Foo getFoo();
}
@Service    
public class FooServiceImpl {
@Autowired FooRep fooRep;
public Foo getFoo() {
return fooRep.getFoo();
}
}

假设此方法是从安全控制器访问的,如下所示:

@RestController
@Secured
public void FooController {
@Autowired FooService fooSer;
@RequestMapping("/foo");
public Foo getFoo() {
return fooSer.getFoo();
}
}

这是一个非常简单的例子,但逻辑的基本部分在这里。

请不要问我为什么需要它,也不要给我如何重组这个架构的建议。

我只需要知道,它会导致与多线程使用相关的任何问题吗?

出现了这个问题,因为我们经历过authentication.getDetails()包含的实例与身份验证拦截器中放置的实例不同的Foo的情况。这很奇怪,看起来不可能。

在某些情况下,当您启动时,例如,一个作业无权访问请求,因此无权访问身份验证信息,但该作业仍然使用存储库。

如果您创建新线程并再次从该线程访问存储库可能会有问题。

最新更新