MemberVO

package kr.or.ddit.vo;

import java.util.Date;
import java.util.List;

import lombok.Data;

@Data
public class MemberVO {
	private int userNo;
	private String userId;
	private String userName;
	private String userPw;
	private Date regDate;
	private Date updDate;
	private List<MemberAuth> authList;
	
}

MemberAuthVO

package kr.or.ddit.vo;

import lombok.Data;

@Data
public class MemberAuth {
	private int userNo;
	private String auth;
}

12.UserDetailsService 재정의

✅ 데이터베이스 테이블

✅ 환경설정

→ 데이터베이스 관련 라이브러리

✅ 스프링 시큐리티 설정

→ customUserDetailsService 빈 등록

→ security:authentication-provider> 태그 설정

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="<http://www.springframework.org/schema/beans>"
	xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
	xmlns:security="<http://www.springframework.org/schema/security>"
	xsi:schemaLocation="<http://www.springframework.org/schema/beans> <http://www.springframework.org/schema/beans/spring-beans.xsd>
		<http://www.springframework.org/schema/security> <http://www.springframework.org/schema/security/spring-security.xsd>">
	
	<bean id="customAccessDenied" class="kr.or.ddit.security.CustomAccessDeniedhandler"></bean>
	<bean id="customLoginSuccess" class="kr.or.ddit.security.CustomLoginSuccessHandler"></bean>

<!-- 사용자가 정의한 비밀번호 암호화 처리기를 빈으로 등록 **(암호화 안쓸땐 이거)**-->
<!-- 	<bean id="customPasswordEncoder" class="kr.or.ddit.security.CustomNoOpPasswordEncoder"></bean> -->
	
<!-- 스프링 시큐리티에서 제공하는 BCryptPasswordEncoder 클래스를 자바빈으로 등록 **(암호화 쓸땐 이거)**-->
	<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
	
	**<!-- 사용자 정의 사용자 상세 기능 ***** 중요!! -->
	<bean id="customUserDetailsService" class="kr.or.ddit.security.CustomUserDetailsService"></bean>**
	
	<security:http>
		
		<security:intercept-url pattern="/board/list" access="permitAll"/>
		<security:intercept-url pattern="/board/register" access="hasRole('ROLE_MEMBER')"/>
		<security:intercept-url pattern="/notice/list" access="permitAll"/>
		<security:intercept-url pattern="/notice/register" access="hasRole('ROLE_ADMIN')"/>
		
		<!-- 로그인 성공 후 처리를 담당하는 처리자로 지정한다. -->
		<security:form-login login-page="/login" authentication-success-handler-ref="customLoginSuccess"/>
		
		<!-- 로그아웃 처리를 위한  URI를 지정하고, 로그아웃 한 후에 세션을 무효화하기 위한 설정을 true로 한다.  -->
		<security:logout logout-url="/logout" invalidate-session="true"/>

		<security:access-denied-handler ref="customAccessDenied"/>
	</security:http>
	
	<!-- 지정된 아이디와 패스워드로 로그인이 가능하도록 설정한다. -->
	<security:authentication-manager>
		<security:authentication-provider **user-service-ref="customUserDetailsService"**>

			<security:password-encoder ref="bcryptPasswordEncoder"/>
		</security:authentication-provider>
	</security:authentication-manager>
</beans>

✅ 클래스 재정의