Search
Duplicate
moon
sun

로그인

로그인

📕 Spring Security 5.7

이전 페이지

💡
이전 페이지 내용에 이어서 진행합니다.

Code

Preview

1.
메인 화면
2.
로그인 화면

작업 프로세스

1.
프로젝트 생성
2.
스프링 시큐리티 설정
3.
요청 경로 매핑

Preview

1.
메인 화면
2.
로그인 화면
3.
메인 화면 (로그인 완료)

메인 화면

로그인 화면

메인 화면 (로그인 완료)

작업 프로세스

1.
프로젝트 생성
📄 build.gradle
spring boot version : 2.x.x
spring security version : 5.x.x
의존성 설정
Spring Web
Spring Boot DevTools
Spring Security
Lombok
Thymeleaf
MySQL Driver
Mybatis Framework
2.
스프링 시큐리티 설정
📄 ~/config/SecurityConfig.java

프로젝트 생성

build.gradle

✅ spring boot 2.x.x
✅ spring security 5.x.x
plugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.aloha' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1' testImplementation 'org.springframework.security:spring-security-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() }
Java
복사

스프링 시큐리티 설정

📄 ~/config/SecurityConfig.java

UserDetailsService 빈 등록

✅
UserDetailsService 빈을 등록하여, 사용자 정보를 불러올 수 있는 SQL 쿼리를 설정해주어 인증 처리를 구현한다.
⭐ 사용자 인증 쿼리
⭐ 사용자 권한 쿼리
@Bean public UserDetailsService userDetailsService() { JdbcUserDetailsManager userDetailsManager = new JdbcUserDetailsManager(dataSource); // 사용자 인증 쿼리 String sql1 = " SELECT username, password, enabled " + " FROM user " + " WHERE username = ? " ; // 사용자 권한 쿼리 String sql2 = " SELECT username, auth " + " FROM user_auth " + " WHERE username = ? " ; userDetailsManager.setUsersByUsernameQuery(sql1); userDetailsManager.setAuthoritiesByUsernameQuery(sql2); return userDetailsManager; }
Java
복사

SecurityConfig.java

@Configuration @EnableWebSecurity public class SecurityConfig { @Autowired private DataSource dataSource; // 스프링 시큐리티 설정 메소드 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { // ✅ 인가 설정 http.authorizeRequests(requests -> requests .antMatchers("/**").permitAll() .anyRequest().permitAll() ); // 🔐 폼 로그인 설정 http.formLogin(withDefaults()); return http.build(); } /** * 👮‍♂️🔐 사용자 인증 관리 빈 등록 메소드 * JDBC 인증 방식 * ✅ 데이터 소스 (URL, ID, PW) - application.properties * ✅ SQL 쿼리 등록 * ⭐ 사용자 인증 쿼리 * ⭐ 사용자 권한 쿼리 * @return */ @Bean public UserDetailsService userDetailsService() { JdbcUserDetailsManager userDetailsManager = new JdbcUserDetailsManager(dataSource); // 사용자 인증 쿼리 String sql1 = " SELECT username, password, enabled " + " FROM user " + " WHERE username = ? " ; // 사용자 권한 쿼리 String sql2 = " SELECT username, auth " + " FROM user_auth " + " WHERE username = ? " ; userDetailsManager.setUsersByUsernameQuery(sql1); userDetailsManager.setAuthoritiesByUsernameQuery(sql2); return userDetailsManager; } }
Java
복사