【发布时间】:2014-04-07 03:14:36
【问题描述】:
我想使用以下代码从 spring Security 中手动绕过用户:
User localeUser = new User();
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(localeUser ,null, localeUser .getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);
// Create a new session and add the security context.
HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
return "dummyLogin";
虚拟登录页面(由图块处理)在内部调用同一控制器中的不同请求映射,我试图在其中获得类似这样的身份验证。
SecurityContextHolder.getContext().getAuthentication()
我在哪里得到空值?
【问题讨论】:
-
您将一个空的 User 对象传递给 UsernamePasswordAuthenticationToken 构造函数。可能这就是你得到 null 的原因。
-
也是一个空密码(我认为这也是非法的)。也许如果你显示堆栈跟踪?
-
password 可以为空,我宁愿在创建会话后检查会话是否相同,并且在运行 getAuthentication 的代码中。记录你的 session.getId() 来检查它。
-
您是否只想为某些特定页面或特定用户或全部绕过安全性?
-
我想绕过该特定会话 ID(用户)的所有页面
标签: java spring security spring-security