프로젝트에 스프링시큐리티 적용하기
🖥️ 환경
java 1.8.0_202
IDE : STS3 (3.9.15.RELEASE)
Spring FrameWork 5.3.25
https://codeplus.tistory.com/180
기존에 적었던 내용을 먼저 진행한다.
좀 달라진게 있다면 스프링프레임워크의 default DB테이블을 사용하는게 아닌
custom테이블을 사용할거라는거 그럼 몇가지 설정이 필요하다.
우선 유저(멤버테이블)과 role 테이블의 물리명이 다르다.
또한 컬럼명도 다르다.
이럴 경우 방법은 두가지가 있다. security-context.xml에서 직접 쿼리문 날려주기
두번째 방법은 UserDetailsService를 구현하는 구현하는방식으로 직접 db를 받고 User를 상속받아 아이디와 비밀번호를 프레임워크에 건네줘 구현하는 방식이다.
두번째 방식으로 구현해보았다.
우선 UserDetailService를 구현해준다.
security-context.xml에 다음을 추가해준다.
<!-- Bean등록 -->
<bean id="customUserDetailsServive" class="team.tttt.webapp.security.CustomUserDetailsService"></bean>
<!-- 유저 서비스 등록-->
<security:authentication-manager>
<security:authentication-provider user-service-ref="customUserDetailsServive">
</security:authentication-provider>
</security:authentication-manager>
CustomUserDetailsService
public class CustomUserDetailsService implements UserDetailsService{
@Inject
private UserMapper userMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserVO user;
try {
user = userMapper.read(username);
return user == null ? null : new CustomUser(user);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
mapper를 통해서 id, pw, enabled, role 등을 불러온다.
UserVO 는 다음과같다.
Role역할을 List로 담아주는것이 포인트다.
CustomUser.class
public class CustomUser extends User {
private UserVO user;
public CustomUser(String username , String password, Collection<? extends GrantedAuthority> authorities) {
super(username, password, authorities);
}
public CustomUser(UserVO user) {
super(user.getUserNo(), user.getUserPswd(),
user.getAuthList().stream().map(auth -> new SimpleGrantedAuthority(auth.getRoleCode())).collect(Collectors.toList()));
this.user = user;
}
public UserVO getMember() {
return user;
}
public void setMember(UserVO user) {
this.user = user;
}
}
security-context.xml에도 추가설정을 해준다.
<security:form-login login-page="/user/login"
username-parameter="userNo"
password-parameter="userPswd"
login-processing-url="/login"
authentication-success-handler-ref="customLoginSuccess"/>
- login-page 는 임의의 custom jsp 로그인페이지를 사용하기위함이고
- username/password 파라미터는 form의 input태그의 name값을 적어주면된다.
- login-processing-url은 action을 보낼경로이고
- success핸들러는 로그인성공시 사용할 핸들러를 걸어주면된다.
role역할명에 ROLE_ 접두사를 사용하지않는방법은 아래방법을 사용했다.
https://codeplus.tistory.com/202
'Study Hard > HW' 카테고리의 다른 글
[자바스크립트] Form태그 체크박스 3개 이상 체크 못하게하기 (0) | 2023.06.26 |
---|---|
Web의 LocalStorage를 알아보자 (0) | 2023.06.26 |
[스프링시큐리티] role명에 "ROLE_" 접두사를 꼭 붙여야 하는가? (해결방법) (0) | 2023.06.25 |
[STS 버전문제] STS 3.9.15, 이클립스 4.16기반버전 이용하려면... (0) | 2023.06.19 |
mybatis 스프링 초기설정 (0) | 2023.05.18 |
댓글