Смена пароля с помощью 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 для изменения пароля текущего вошедшего в систему пользователя достаточно? Пожалуйста, предложите, если яя делаю что-то не так в любом месте!
Это содержание может быть слишком большим, чтобы ответить на этот вопрос, но яЯ спрашиваю об этом, потому что это нечто довольно экспериментальное.