相关疑难解决方法(0)

如何在Spring Security/SpringMVC中手动设置经过身份验证的用户

在新用户提交"新帐户"表单后,我想手动将该用户登录,这样他们就不必在后续页面上登录.

通过spring安全拦截器的普通表单登录页面工作得很好.

在新帐户形式的控制器中,我正在创建UsernamePasswordAuthenticationToken并手动在SecurityContext中设置它:

SecurityContextHolder.getContext().setAuthentication(authentication);
Run Code Online (Sandbox Code Playgroud)

在同一页面上,我稍后检查用户是否已登录:

SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Run Code Online (Sandbox Code Playgroud)

这将返回我之前在身份验证中设置的权限.一切都很好.

但是当我加载的下一页上调用相同的代码时,身份验证令牌就是UserAnonymous.

我不清楚为什么它没有保留我在上一个请求中设置的身份验证.有什么想法吗?

  • 是否与会话ID未正确设置有关?
  • 有什么东西可能会以某种方式覆盖我的身份验证吗?
  • 也许我只需要另一步来保存身份验证?
  • 或者我需要做些什么才能在整个会话中声明身份验证而不是单个请求?

只是寻找一些可能有助于我了解这里发生了什么的想法.

java authentication spring-mvc spring-security

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

使用 Spring-Session 时更新 Session 中的主体

我们用我们自己的 User 对象扩展了主体。这样,该对象对于每个请求都是可用的。当用户更新其信息时,主体需要使用这些新数据进行更新。当不使用 spring-session 时,此方法有效。然而,对于 spring-session 来说,情况并非如此。

我检查了 spring-session 代码,以及RedisOperationsSessionRepository:save(RedisSession session)唯一的调用session.saveDelta(),它仅保存更改的属性。那么,我们如何在会话中更新主体呢?

注意 - 更新主体的地方位于服务层,因此我们无权访问SessionAuthenticationStrategy.

spring spring-security spring-session

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

Spring Security:autowire ProviderManager

我正在尝试使用Spring Security以编程方式验证用户登录/传递,因此我需要访问ProviderManager.我希望它能自动注入我的@Controller.

我的代码看起来像:

import org.springframework.security.authentication.ProviderManager;

// ...

@Controller
public class MyController {

    @Autowired
    private ProviderManager authenticationManager;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行应用程序时,我收到以下错误消息:

No unique bean of type [org.springframework.security.authentication.ProviderManager] is defined: 
expected single matching bean but found 2: 
[org.springframework.security.authentication.ProviderManager#0, org.springframework.security.authenticationManager]
Run Code Online (Sandbox Code Playgroud)

可能是什么原因或我如何解决?

我使用Spring Security 3.0.0-RC1和Spring 3.0.1,我没有定义任何ProviderManagerbean.我成功使用了:

@Resource
private ProviderManager authenticationManager;
Run Code Online (Sandbox Code Playgroud)

在其他项目中,但javax.annotation.ResourceGAE不支持.

google-app-engine spring spring-security

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