이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
실전 프로젝트 생성
실전 프로젝트 구성
- 프로젝트 명
- core-spring-security
- 기본 의존관계 설정
- pom.xml
- 기본 패키지 및 폴더 구성
- 기본 View Template 생성
- 기본 정적 자원 생성
Postgresql Server 설치
https://www.postgresql.org/
참고: https://dog-developers.tistory.com/122
참고
완성된 프로젝트는 다음과 같다.
https://github.com/DongWoonKim/core-spring-security
참고해서 하자.
시큐리티 의존성 추가 및 기본 환경설정
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.0</version>
</dependency>
application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.thymeleaf.cache=false
spring.devtools.livereload.enabled=true
spring.devtools.restart.enabled=true
SecurityConfig 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.formLogin();
return http.build();
}
}
실행
- 정수원 님의 깃허브에서 소스코드를 다운 받은 후 실행
- 정상적으로 실행 되었다면 이제 사용자에게 권한을 부여한다.
권한 부여
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public UserDetailsManager users() {
String password = passwordEncoder().encode("1111");
UserDetails user = User.builder()
.username( "user" )
// .password("{noop}1111")
.password( password )
.roles( "USER" )
.build();
UserDetails manager = User.builder()
.username("manager")
.password( password )
.roles("MANAGER")
.build();
UserDetails admin = User.builder()
.username("admin")
.password( password )
.roles("ADMIN", "MANAGER", "USER")
.build();
return new InMemoryUserDetailsManager( user, manager, admin );
}
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.antMatchers("/").permitAll()
.antMatchers("/mypage").hasRole("USER")
.antMatchers("/messages").hasRole("MANAGER")
.antMatchers("/config").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin();
return http.build();
}
}
'스프링 시큐리티 > 실전프로젝트 - 인증 프로세스 Form 인증 구현' 카테고리의 다른 글
DB 연동 인증 처리(2): CustomAuthenticationProvider (0) | 2023.02.11 |
---|---|
DB 연동 인증 처리(1): CustomUserDetailsService (0) | 2023.02.11 |
사용자 DB 등록 및 PasswordEncoder (0) | 2023.02.10 |
정적 자원 관리 - WebIgnore 설정 (0) | 2023.02.10 |
프로젝트 Dependency (0) | 2023.02.10 |