我正在寻找一种使用 DWR 登录/注销用户的方法,这样我就可以使用登录和注销方法创建一个 DWR bean。
public class AuthorizationHandler {
@Autowired
private UserRepository userRepository;
public Map<String, String> loginUser(String userName, String password) {
Map<String, String> map = new HashMap<>();
if (userRepository.validate(userName, password)) {
// login the user here
map.put("success", true);
map.put("redirect", ...);
} else {
map.put("success", false);
}
return map;
}
public Map<String, String> logoutUser() {
// logout the user here
Map<String, String> map = new HashMap<>();
map.put("success", "ok");
return map;
}
}
我的问题是我找不到与用户合作并以编程方式登录/注销的方法。所有教程都使用基于 xml 的配置,但背后的内容是隐藏的。
最佳答案
在我的一个应用程序中,我有类似的要求,请查找我遵循的步骤
public void authenticateSession(HttpSession session, UserDetails user) {
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
user.getUsername(), user.getPassword());
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(
user, authRequest.getCredentials(), user.getAuthorities());
result.setDetails(authRequest.getDetails());
SecurityContext ctx = SecurityContextHolder.createEmptyContext();
ctx.setAuthentication(result);
session.setAttribute(
UsernamePasswordAuthenticationFilter.SPRING_SECURITY_LAST_USERNAME_KEY,
TextEscapeUtils.escapeEntities(user.getUsername()));
session.setAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
ctx);
AuthenticationSuccessEvent event = new AuthenticationSuccessEvent(
result);
applicationContext.publishEvent(event);
}
此方法使用传递的用户对象对传递的 session 进行身份验证。
在您的情况下,您必须获取 UserDetails
对象并将其与当前 session 一起传递给此方法。
您可以使用UserDetailsService
接口(interface)加载UserDetails
。
关于java - 通过 DWR(直接 Web 远程处理)进行 Spring Security 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9820793/