https://dodop-blog.tistory.com/228
위 글을 참고하여 JWT 토큰 기반 로그인 기능을 구현했다. 동작 순서는 아래와 같았는데,
동작 순서
- JwtAuthenticationController.java:
- 클라이언트에서 /authenticate URL로 사용자의 인증 정보를 제출
- JwtRequestFilter에서 추출한 사용자의 정보를 받아서 실제 인증을 시도
- 성공하면 JWT 토큰을 생성하고 클라이언트에게 반환
- JwtRequestFilter.java:
- HTTP 요청에서 JWT 토큰을 추출하고, 추출한 토큰을 검증
- 토큰이 유효하면, 해당 토큰을 사용하여 사용자를 인증하고, 보안 컨텍스트에 사용자 정보를 설정
- JwtUserDetailsService.java:
- 데이터베이스에서 사용자 정보를 가져오는 역할
- JwtRequestFilter에서 추출한 사용자 이름을 사용하여 데이터베이스에서 해당 사용자의 정보를 조회
- JwtUserDetails.java:
- Spring Security의 UserDetails 인터페이스를 구현한 클래스, 실제 사용자의 정보를 나타냄
- 사용자의 권한 등의 정보를 담고 있음
- JwtTokenUtil.java:
- JWT 토큰을 생성하고, 토큰에서 정보를 읽어오는 등 JWT 관련 유틸리티 클래스
- 토큰의 생성, 유효성 검증, 클레임에서 정보 추출 등의 기능 제공
- JwtAuthenticationEntryPoint.java:
- Spring Security에서 인증이 실패했을 때 호출되는 커스텀 핸들러
- 401 Unauthorized 응답을 클라이언트에게 반환
- WebSecurityConfig.java: (핵심)
- Spring Security의 설정 클래스, 보안에 관련된 다양한 설정
- JWT 관련 필터 및 커스텀 핸들러를 설정
- JwtRequest.java:
- 클라이언트에서 전달되는 인증 정보를 담는 클래스
단순히 WebSecurityConfig.java 파일만 추가했더니, 컨트롤러의 url에 보안이 적용되지 않았다...
스프링 시큐리티가 제대로 설정이 되지 않은 것 같아, context-security.xml 파일과 web.xml에 코드를 추가하였다.
context-security.xml
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.2.xsd">
</beans:beans>
web.xml
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
적용 방법은 아래와 같다.
# WebSecurityConfig.java 클래스에서 configure(HttpSecurity http) 함수를 재정의
※ .antMatchers("url명").authenticated() : 해당 url은 토큰을 발급받은 사용자만 사용 가능
※ .antMatchers("url명").hasAuthority("USER") : 해당 url은 USER라는 권한을 부여받은 사용자만 사용 가능
# (USER 등...) 권한을 부여하는 법
1. 코드를 JwtUserDetailsService.java 파일의 loadUserByUsername 함수(필요에 따라 다른 함수)안에 넣어줌
- 코드 예시 : (만약, DspUseYn 컬럼의 값이 Y인 경우 권한이 부여되는 경우라면)
if (entityUser != null && "Y".equals(entityUser.getDsp_use_yn())) {
return new JwtUserDetails(entityUser);
}
- JwtUserDetails.java 클래스의 getAuthorites() 함수에서 return값을 보면 USER라고 되어있음
USER라는 권한을 부여한다는 의미이므로 WebSecurityConfig.java 클래스의 configure(HttpSecurity http)안에
.antMatchers("url명").hasAuthority("USER")를 추가해준다면, USER 권한이 부여된 사용자면 이 url에 접속이 가능함
2. 알맞게 DAO, mapper 파일 등 수정
이제 테스트해보면 허용되지 않은 url에서는 401(인가 안됨)이 뜨는 것을 확인할 수 있다!

'GIS Development' 카테고리의 다른 글
| Git으로 협업하기! (0) | 2024.02.17 |
|---|---|
| 약속장소 정하기 (2) - 다익스트라 알고리즘(Dijkstra Algorithm)으로 최단경로 찾기 (0) | 2023.11.29 |
| 약속장소 정하기 (1) - Geocoding과 Reverse Geocoding (0) | 2023.11.28 |
| REST API로 지오서버 리로드(geoserver reload)하기 (1) | 2023.11.21 |
| 오픈레이어스로 편집한 객체를 지오서버에 저장하는법 : WFS-Transaction (0) | 2023.11.20 |