Вход в Spring Security через DWR (прямое сетевое взаимодействие) - PullRequest
2 голосов
/ 22 марта 2012

Я ищу способ входа / выхода пользователей с помощью DWR, чтобы я мог просто создать объект DWR с методами входа и выхода.

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, но то, что находится позади, является своего рода скрытым.

1 Ответ

3 голосов
/ 22 марта 2012

В одном из моих приложений у меня было похожее требование, пожалуйста, найдите шаги, которым я следовал

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);
}

Этот метод аутентифицирует переданный сеанс с переданным пользовательским объектом.

В вашем случае вы должны получить объект UserDetails и передать его этому методу вместе с текущим сеансом.

Вы можете использовать интерфейс UserDetailsService для загрузки UserDetails.

...