java - 通过 DWR(直接 Web 远程处理)进行 Spring Security 登录

标签 java spring-security dwr

我正在寻找一种使用 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 一起传递给此方法。

您可以使用UserDetailsS​​ervice接口(interface)加载UserDetails

关于java - 通过 DWR(直接 Web 远程处理)进行 Spring Security 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9820793/

相关文章:

java - 如何使用 JAVA 在 CXF Restful Web 服务中包含异常处理机制

java - 如何在 Java JTextArea 中读取 FNC1 字符

java - 在 ListView 中更改一个 EditText 会更改所有

java - Spring Security 是否需要使用 Spring Session?

spring - JpaRepository 上的 @PreAuthorize

java - 访问作为 Collection<Object> 类型返回的 ArrayList

web-services - 如何使用 spring3 保护服务 REST?

java - 警告 [org.directwebremoting.dwrp.BaseCallHandler] 处理批处理时出现异常

java - cometd vs pubsub..?

javascript - 如何让函数等待 ajax 调用返回一个值,然后再返回 true 或 false?