- Java 17
- Maven
- Spring Boot 3.0.3
- Spring Security 6.0.2
- Oracle 11g
- Mybatis
- IntelliJ Ultimate
- DBeaver
- Thymeleaf
폴더 구조
Security 한번 구현해보겠다고 일주일 내내 작업한거 같다
거의 대부분의 예제들은 3.0.0 이하의 버전들로 SecurityConfig에서
WebSecurityConfigurerAdapter 을 상속받아야 하고 JPA를 사용하고 있다
WebSecurityConfigurerAdapter을 상속받아서 하는 것과 변경된 방식인 @Bean 과 SecurityFilterChain 을 사용하는 것이
크게 다른 것은 없으나 Security에 대해 아무것도 모른다는 가정하에 이것은 큰 난항이었다
로그인 시 Security 만 사용해도 되는지, 어디까지가 Security인지, JWT까지 이용해야 할지
이건 어떤 메서드인지 어떻게 동작하는지 다 모르기 때문에 하나하나 다 까보고 debug 걸어가며 작업하였다
그리고 JPA를 선호하지 않는 나에게는 JPA 예제들만 있다는 것은 너무 큰 문제 였다
단순한 CRUD를 사용하기에는 정말 간편하고 좋지만 내 마음대로 커스텀하고 간단한 Join 문만 이용하려고 해도
복잡해지는게 싫어서 Mybatis를 그대로 사용하려한다
현재 글은 JWT를 적용하지 않은 Spring Security 이며
로그인 시 인증(AuthenticationEntryPoint) 을 해주며
권한이 없는 페이지로 이동하였을 때 인가(AccessDeniedHandler) 를 확인해준다
일주일간 구글링과 유튜브를 참고하며 간단하게 구현하였다
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>3.0.4</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- Oracle -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.9.0.0</version>
<scope>runtime</scope>
</dependency>
<!-- Ms Sql -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.2.0.jre11</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.0.4</version>
<scope>test</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- spring-security-core -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.0.4</version>
</dependency>
<!-- jwt -->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt</artifactId>-->
<!-- <version>0.9.1</version>-->
<!-- </dependency>-->
<!-- javax -->
<!-- <dependency>-->
<!-- <groupId>javax.xml.bind</groupId>-->
<!-- <artifactId>jaxb-api</artifactId>-->
<!-- <version>2.1</version>-->
<!-- </dependency>-->
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<scope>provided</scope>
</dependency>
</dependencies>
JWT , Javax , ms sql 은 사용하지 않았다
lombok은 취향에 맞게 사용하면 되겠다
application.properties
server.port=9090
# Database log4j
#spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#spring.datasource.url=jdbc:oracle:thin:@localhost:1521/XE
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521/XE
spring.datasource.username=system
spring.datasource.password=0000
#### thymeleaf
spring.thymeleaf.prefix=classpath:templates/
spring.thymeleaf.check-template-location=true
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.cache=false
spring.thymeleaf.order=0
# devtools
spring.devtools.livereload.enabled=true
# VO location
mybatis.type-aliases-package=com.example.practice.vo
# xml location
mybatis.mapper-locations=classpath:mappers/**/*.xml
'개발 > Security' 카테고리의 다른 글
[SpringBoot] Security 로그인 인증, 인가(6) - Service (0) | 2023.04.30 |
---|---|
[SpringBoot] Security 로그인 인증, 인가(5) - Vo , Mapper (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(4) - AuthProvider (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(3) - handler (0) | 2023.04.30 |
[SpringBoot] Security 로그인 인증, 인가(2) - SecurityConfig (0) | 2023.04.30 |
댓글