Spring security 以编程方式存储身份验证对象

Spring security 以编程方式存储身份验证对象,spring-security,Spring Security,我试图创建一个usernamepasswordauthenticationtoken并直接添加到安全上下文中。在许多地方,我已经阅读了以下代码: Authentication request = new UsernamePasswordAuthenticationToken( username, password ); Authentication result = authenticationManager.authenticate( request ); SecurityContextHol

我试图创建一个usernamepasswordauthenticationtoken并直接添加到安全上下文中。在许多地方,我已经阅读了以下代码:

Authentication request = new UsernamePasswordAuthenticationToken( username, password );
Authentication result = authenticationManager.authenticate( request );
SecurityContextHolder.getContext().setAuthentication( result );
但对我来说,我需要添加下面提到的行,使其工作

HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext); 

我做错什么了吗?因为我不想使用会话。

你说的“让它工作起来”是什么意思?您的用例是什么?1.我想通过编程将用户插入到spring安全上下文中(即不是从登录页面,我将直接创建一个usernamepasswordauthentication令牌并将其添加到上下文中)。我想避免会议。但当我只尝试前3行代码时,它对我不起作用。Spring将我重定向到登录页面,即用户不会被存储在安全上下文中。但当我在会话中添加对象时,它会工作。所以我想知道有没有办法避免在spring security中使用会话?spring security web基础设施基于Servlet过滤器和一系列帮助器类。通过它的扩展点,它可以很容易地扩展以满足几乎任何用例。您需要的是为您找到正确的扩展点。请发布您的Spring安全配置。您不必使用会话,但随后必须将身份验证详细信息存储在其他位置(例如数据库)或通过每个请求对用户进行身份验证。如果不使用会话,则在请求之间无处存储状态。您如何期望服务器知道稍后的请求来自同一用户?您还应该发布您的安全配置。除非您确保在请求结束时也清除了上下文,否则仅将前几行添加到应用程序是危险的。