이 주제에 대한 검색이 거의 발견되지 않은 것에 놀랐습니다. 저는 Spring Security를 사용하여 사용자가 Spring MVC 응용 프로그램에 로그인 할 수있게했습니다. 또한 서비스 레이어에서 최대 절전 모드를 사용하여 db에 대한 변경 사항을 유지합니다 (응용 프로그램의 나머지 부분에서 사용하는 것과 동일한 db에 사용자 정보를 유지합니다). 이 환경 (스프링 보안의 장점 사용)에서 어떻게 사용자가 자신의 비밀번호를 변경할 수 있습니까? 스프링 보안을 사용할 때 비밀번호 변경을 처리하는 방법
이
은 내spring-security.xml
:
@Service
@Transactional(readOnly = true)
public class CustomUserDetailsService implements UserDetailsService {
@Resource
private UserService userService;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
org.jana.domain.User domainUser = userService.getByUsername(username);
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
return new User(
domainUser.getUsername(),
domainUser.getPassword().toLowerCase(),
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
getAuthorities(domainUser.getRole().getRole()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
...
그리고이 최대 절전 모드 다루는 서비스 :
@Service("userService")
@Transactional
public class UserService {
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
public User getByUsername(String username) {
Session session = sessionFactory.getCurrentSession();
String hql = "FROM User u WHERE u.username = :username";
Query query = session.createQuery(hql);
query.setParameter("username", username);
User user = (User)query.uniqueResult();
return user;
}
난 내가 정의 사용자 정보 서비스를 구현
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/essays/auth/login" access="permitAll"/>
<intercept-url pattern="/essays/auth/logout" access="permitAll"/>
<intercept-url pattern="/essays/auth/denied" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/" access="hasRole('ROLE_USER')"/>
/* more intercept urls */
<form-login login-page="/essays/auth/login"
authentication-failure-url="/essays/auth/login?error=true"
default-target-url="/essays/main/student/search"
always-use-default-target="true"/>
<access-denied-handler error-page="/essays/auth/denied"/>
<logout invalidate-session="true"
logout-success-url="/essays/auth/login"
logout-url="/essays/auth/logout"/>
</http>
<authentication-manager>
<authentication-provider user-service-ref="customUserDetailsService">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
이것에 새로운 어떤 도움든지 다량 평가 될 것이다. 고맙습니다.
비밀 번호를 변경하여 다른 속성 (예 : 이메일)을 변경하는 데 특별한 것은 없습니다. 스프링 시큐리티는 인증과 권한 부여를 목표로합니다. 이는 단순히 데이터베이스 업데이트 일뿐입니다. –
이렇게 스프링 보안 기능이 없으므로 자동화가 쉬워졌습니다. –
내가 아는 기능이 없습니다. –