java - 从 Spring Security 访问 Spring MVC 服务

标签 java spring spring-mvc spring-security

我正在使用 Spring 3 并尝试在用户登录后从数据库中填充 Spring Security Authentication bean 的权限。

我有一个用于访问数据库的服务,例如

@Service
public class UserService {
    public User getUser(String username){...}
}

正常情况下,我可以@Autowire这个服务,但是因为Authentication bean是Spring Security创建的,所以好像访问不了这个服务。我也尝试使用 ApplicationContextAware 接口(interface),但 Spring Security 似乎有一个单独的 ApplicationContext

我可以通过 getUserPrincipal() 从 MVC 访问 Authentication bean,但是有什么方法可以从 Spring Security 身份验证中的某个地方访问这个 @Service 吗?

最佳答案

我不确定你的设置是什么或你想做什么,但我会尝试根据基本的 spring-security 设置来帮助你。

首先,您的 UserService 应该实现 UserDetailsService

在你的 web.xml 中

<!-- Context Configuration locations for Spring XML files -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:META-INF/spring/some-application-service.xml
        /WEB-INF/security.xml
    </param-value>
</context-param>

/WEB-INF/security.xml

<!-- 
  Assuming UserService is in com.sample.security package.
-->
<context:component-scan base-package="com.sample.security"/>
<authentication-manager>
    <authentication-provider user-service-ref="userService" />
</authentication-manager>

关于java - 从 Spring Security 访问 Spring MVC 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751115/

相关文章:

java - 纹理添加黑色和白线

java - 在类路径中包含 Qclass

java - 如何在 Spring MVC 中将未编码的字符串写入 View ?

java - spring3 @autowired 和 @inject

java - 如何创建 CL GL 互操作上下文?

java - 准备好的陈述有问题

java - 通过 IntellIj 运行 gradle 应用程序

java - 如何在 BroadLeaf Commerce 框架中找到请求的 Controller 类

spring - 如何在其他 Controller 中访问使用 spring @cacheable 缓存的值?

java - 如何强制 spring @ResponseBody 使用 xml 转换器