기존의 스프링 프로젝트에 시큐리티를 적용하는 과정이다.
1. 시큐리티 의존성
pom.xml에 시큐리티 디펜던시를 추가한다.
org.spring-security-version 값은 mvnrepository를 참고하여 스프링 버전과 호환되는 버전을 선택하였다.
이후 maven 업데이트를 진행한다.
<properties>
...
...
<org.spring-security-version>5.3.1.RELEASE</org.spring-security-version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${org.spring-security-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${org.spring-security-version}</version>
</dependency>
...
...
</dependencies>
- . LogoutSuccessHandler 구현
로그아웃에 성공했을 시 리디렉트하는 핸들러이다.
public class CustomUsLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
@Override
public void onLogoutSuccess (HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
super.onLogoutSuccess(request, response, authentication);
}
}
- . Config 클래스
WebSecurityConfig 클래스를 생성하고, 어노테이션 및 WebSecurityConfigurerAdapter 상속을 한다.
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
}
LoginAuthenticationFilter 클래스를 생성하고, 인증 메소드를 만든다.
public class LoginAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private boolean postOnly = true;
public LoginAuthenticationFilter (AuthenticationManager authenticationManager) {
super.setAuthenticationManager(authenticationManager);
}
/*
* 사용자 요청으로부터 정보를 가져온 후, Authentication 객체를 인증 프로세스 객체에게 전달
*/
@Override
public Authentication attemptAuthentication (HttpServletRequest request, HttpServletResponse response) {
// post 인지 확인
if (postOnly && !request.getMethod().equals("POST")) {
throw new AuthenticationServiceException("POST 방식만 Authentication 가능합니다. " + this.getClass().toString());
}
String username = obtainUsername(request);
String password = obtainPassword(request);
if (StringUtils.isEmpty(username))
username = "";
if (StringUtils.isEmpty(password))
password = "";
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
}
참고자료
'Spring' 카테고리의 다른 글
[Spring] 하나의 프로젝트에 다른 포트 번호로 두 개의 App을 실행하기 (0) | 2021.08.23 |
---|---|
[Spring] 서버에서 다른 서버의 Rest API 요청 및 응답 받기 (0) | 2021.07.25 |
[WebSocket] 스프링 채팅 구현 (2) - 다수 채팅방 (2) | 2021.06.04 |
[WebSocket] 스프링 채팅 구현 (1) - 채팅 전송 및 수신 (0) | 2021.06.04 |
[Spring] 이클립스에 Lombok 설치하기 - 이클립스 메뉴 및 Maven을 이용해 간편하게 (0) | 2021.05.19 |
댓글