저는 스프링 기반의 mvc 및 스프링 보안 기반 웹 기반 애플리케이션을 구축하고 있습니다.스프링 보안에서 만료 된 비밀번호를 변경하도록 사용자를 강요합니다.
암호 재설정 기능을 구현했습니다. 시스템 관리자는 모든 사용자의 암호를 재설정합니다. 생성 된 임의의 암호는 사용자에게 전자 메일로 전송되며 데이터베이스에서도 업데이트됩니다.
이제 임의로 생성 된 비밀번호로 로그인 할 때마다 사용자가 비밀번호를 변경하도록하고 싶습니다.
내 사용자 표 좀 봐주세요.
사용자 ID BIGINT (20)
자명 VARCHAR (20)
암호 VARCHAR (65)
이메일 VARCHAR (50)
FIRSTNAME의 VARCHAR (20)
LASTNAME의 VARCHAR (20)
그룹 이름의 VARCHAR (50)
활성화 TINYINT (1)
credentialsNonExpired의 TINYINT (1)
MY Authenticat I는 jdbcUserServiceJdbcDaoImpl은으로 연장 JDBCUserDetailsService를 사용한
<!--
Configuring Authentication Provider to make use of spring security
provided Jdbc user management service
-->
<authentication-provider user-service-ref="jdbcUserService">
<!--
Configuring SHA-1 Password Encoding scheme to secure user credential
-->
<password-encoder ref="sha1PasswordEncoder" />
</authentication-provider>
</authentication-manager>
이온 공급자.
비밀번호를 재설정 할 때 credentialNonExpired을 내 사용자 테이블의 허위 열로 설정하고 싶습니다.
나는 그렇게 할 수있다.
그러나 로그인 할 때 스프링 보안 JDBCuserdetailsservice loadUserbyUsername 사용자 이름, 암호, 사용 가능한 열 및 나머지 모든 필드 만 true로 설정됩니다.
protected List<UserDetails> loadUsersByUsername(String username) {
return getJdbcTemplate().query(usersByUsernameQuery, new String[] {username}, new RowMapper<UserDetails>() {
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
boolean enabled = rs.getBoolean(3);
return new User(username, password, enabled, true, true, true, AuthorityUtils.NO_AUTHORITIES);
}
});
}
는하지만 실제 그 봄 보안 CREDENTIALEXPIREDEXCEPTION을 던질 것이다, 그래서 다시 암호가 설정 필드를 credentialNonExpired합니다.
나는 위의 방법을로드하여이를 달성했지만 만료 된 비밀번호로 로그인 할 때 비밀번호 페이지를 변경하도록 사용자를 리디렉션하는 다른 방법이 있습니다.
어떻게 할 수 있습니까?
매우 비슷한 문제를 해결하고이 경로로 향하고 있습니다 ... 암호 변경 논리를 가장 잘 처리하는 방법에 대한 권장 사항이 있습니까? 모든 정상적인 "로그인"기능 (암호 확인, 오류 코드 반환)을 복제하려고 시도하는 것처럼 보일 수도 있습니다. – bimsapi
JPA 및 모델을 사용하고 있는데이를 통해 직접 업데이트하지 않고 있습니다. 전체 봄 보안주기. 그것은 가장 빠른 길로 보였습니다. 물론 비밀번호를 변경 한 후 사용자를 로그인 페이지로 리디렉션합니다. –
그래, 난 당신의 방법은 빠른했을 것이다 :) 여기에 내가하고 결국 무엇을 생각 - *'UsernamePasswordResetAuthentication'를 새/확인 암호 필드에 사용자 이름, 암호 및 새 암호 * 로그인 페이지가 적절한 경우 * 로그인 (기존의 다른 이유로) 사용자 정의 AuthenticationProvider는 1) 기존 암호로 인증하고, 2) 저장된 암호를 업데이트하고, 3) 새 암호로 다시 인증하기 위해 확장 된 요청을 기반으로 올바른 인증 개체를 만드는 필터 . – bimsapi