저는 스프링 MVC [버전 : 2.5]와 보안 [버전 : 2.0.4]을 사용합니다.spring-security wrong logged logged user
내 문제는 다음과 같습니다
사용자 A의 로그인 및 암호를 사용하여 내 응용 프로그램에:먼저 로그인 -> 확인
로그 아웃 사용자 A, 사용자 B가에서 로그인입니다
사용자 B의 로그인 + 암호 작품. 좋아요, 앱에 있는데 UserB ROLE이 켜져 있습니다. [관리자가 아닌 경우 관리자 세션에 액세스 할 수 없음]
userejb.findUserByUsername(SecurityContextHolder.getContext().getAuthentication().getName());
내 사용자가 아닌 사용자 B하지만 사용자 A는 ...
는내가 그것을 어떻게 를 해결할 수
나는 로그인 사용자에 대해, 데이터베이스에서 데이터를 얻기 위해이 코드를 사용할 수 있습니까? 내가 뭘 잘못 했니?
내 보안 구성 :
<bean id="userDetailsService" class="pl.tzim.jlp.security.CustomUserDetailsServiceImpl" />
<http auto-config='true'>
<!-- login panel dostepny dla wszystkich chetnych!-->
<intercept-url pattern="/login.action" filters="none"/>
<intercept-url pattern="/index.jsp" filters="none"/>
<intercept-url pattern="/CS/**" filters="none" />
<intercept-url pattern="/JS/**" filters="none" />
<intercept-url pattern="/grafiki/**" filters="none" />
<intercept-url pattern="/free/**" access="" />
<intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
<intercept-url pattern="/teacher/**" access="ROLE_TEACHER, ROLE_ADMIN"/>
<intercept-url pattern="/all/**" access="ROLE_STUDENT, ROLE_TEACHER, ROLE_ADMIN"/>
<intercept-url pattern="/student/**" access="ROLE_STUDENT, ROLE_TEACHER, ROLE_ADMIN"/>
<intercept-url pattern="/login/**" access="ROLE_STUDENT, ROLE_TEACHER, ROLE_ADMIN" />
<intercept-url pattern="/*" access="ROLE_STUDENT, ROLE_TEACHER, ROLE_ADMIN" />
<form-login login-page='/free/login.action' authentication-failure-url="/free/login.action?why=error" default-target-url="/free/index.action"/>
<logout logout-success-url="/free/login.action?why=logout"/>
<concurrent-session-control max-sessions="99" exception-if-maximum-exceeded="true"/>
</http>
<authentication-provider user-service-ref='userDetailsService' />
내 loginUser 클래스 및 방법 :
@SessionAttributes(types = {CustomUser.class}, value = "{logedUser}")
public class CustomUserDetailsServiceImpl implements UserDetailsService {
@Autowired
public UserDAO userdao;
public CustomUser logedUser;
@Transactional(readOnly = true)
@Override
public CustomUser loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
try {
pl.tzim.jlp.model.user.User user = this.userdao.findUserByUsername(username);
String password = user.getPassword();
String role = user.getAuthority().getRolename();
boolean enabled = true;
logedUser = new CustomUser(user.getId(), username, password, enabled, new GrantedAuthority[]{new GrantedAuthorityImpl(role)});
return logedUser;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
public class CustomUser extends User{
private Long id;
public CustomUser(Long id, String username, String password, boolean isEnabled, GrantedAuthority[] authorities){
super(username, password, isEnabled, true, true, true, authorities);
this.setId(id);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
죄송합니다. 나는 그것을 잊었다. 로그를 자세히 살펴본 후에 오류가 내 코드라는 것을 알게되었습니다. (logeduser! = null) { return getuserfromdatabase } return logeduser; 그러나 app에 처음 로그인 한 후 logeduser는 null이 아닙니다. – tzim