Смена пароля с помощью Spring Security

Я использую,

Spring Framework 4.0.0 RELEASE (GA)Spring Security 3.2.0 RELEASE (GA)Struts 2.3.16

в котором я использую,

org.springframework.security.authentication.dao.DaoAuthenticationProvider

для аутентификации. мойspring-security.xml Файл выглядит следующим образом.




    

    
        
            
        

        

        
            
            
            
            
             
        

        

        
        
    

    

    
        
        
    

    
        
            
                
            
        
    

    
                    
    

    
    

    
        
    

РеализацияUserDetailsService как следует.

@Service(value="userDetailsService")
public final class UserDetailsImpl implements UserDetailsService {

    @Autowired
    private final transient UserService userService = null;
    @Autowired
    private final transient AssemblerService assemblerService = null;

    @Override
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        UserTable userTable = userService.findUserByName(userName);

        if (userTable == null) {
            throw new UsernameNotFoundException("User name not found.");
        } else if (!userTable.getEnabled()) {
            throw new DisabledException("The user is disabled.");
        } else if (!userTable.getVarified()) {
            throw new LockedException("The user is locked.");
        }

        //Password expiration and other things may also be implemented as and when required.
        return assemblerService.buildUserFromUserEntity(userTable);
    }
}

А следующее - это вспомогательный сервис, который преобразует пользовательский объект, который должен использоваться SpringUser объект.

@Service(value="assembler")
@Transactional(readOnly = true, propagation=Propagation.REQUIRED)
public final class AssemblerDAO implements AssemblerService {

    @Override
    public User buildUserFromUserEntity(UserTable userTable) {
        String username = userTable.getEmailId();
        String password = userTable.getPassword();
        boolean active = userTable.getEnabled();
        boolean enabled = active;
        boolean accountNonExpired = active;
        boolean credentialsNonExpired = active;
        boolean accountNonLocked = userTable.getVarified();
        Collection authorities = new ArrayList();

        for (UserRoles role : userTable.getUserRolesSet()) {
            authorities.add(new SimpleGrantedAuthority(role.getAuthority()));
        }

        return new User(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
    }
}

Нет необходимости ссылаться на эти классы.

Мой вопрос заключается в том, что при использовании,

org.springframework.security.provisioning.JdbcUserDetailsManager

UserDetailsManager может быть введен в контроллер и его

public void changePassword(String oldPassword, String newPassword) throws AuthenticationException {
    //...
}

Метод может быть использован для изменения пароля. Я никогда не пробовал это, но это может быть примерно реализовано следующим образом.


    
    

и в контроллере его следует вводить следующим образом.

@Autowired
@Qualifier("jdbcUserService")
public UserDetailsManager userDetailsManager;

Есть ли какая-либо возможность, предоставляемая Spring security в подходе I?Я использую или просто мой собственный метод в DAO для изменения пароля текущего вошедшего в систему пользователя достаточно? Пожалуйста, предложите, если яя делаю что-то не так в любом месте!

Это содержание может быть слишком большим, чтобы ответить на этот вопрос, но яЯ спрашиваю об этом, потому что это нечто довольно экспериментальное.

Ответы на вопрос(2)

Ваш ответ на вопрос