Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 자바 스크립트
- login
- 백틱
- AJAX
- IntelliJ
- 시
- SpringBoot
- 취미
- security
- MockAPI
- 로그인
- ES6+
- API
- JavqScript
- 카카오
- @AuthenticationPrincipal
- 공부
- Security 설정
- 유효성 검사
- HttpOnly
- 웹개발
- findBy
- js
- 분리 개발
- 웹
- 보안
- VS Code
- 낙서
- Method 방식
- 그림
Archives
- Today
- Total
개발가능구역
[ IntelliJ ] Spring Security 로그인 01 본문
반응형
로그인은 개인의 계정을 입력하여 권한을 얻는 행위이다
앞전 유효성 검사는 그 계정을 만들기 위한 페이지를 구현하기 위함이었고,
이제부터는 로그인을 공부해보려 한다

아직 초심자라 모르는 부분 투성이지만 차근차근 해보려 한다
🔴 목 차
1. 작업 툴
2. 의존성 추가
3. SecurityConfig
- 설정 클래스
- 접근 권한 설정
- 로그인 완료 설정
- 로그아웃 완료 설정
- 비밀번호 암호화
🔴 작업 툴
IDE : IntelliJ
웹 서버 : Apache
UI : HTML5, Thymeleaf
사용 클래스 : Config
사용 DB : Oracle
🔴 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.security:spring-security-test'
우선 build.gradle 에 해당 코드를 넣어준 후 오른쪽에 코끼리가 뜨는 클릭하고, 실행을 한다
이제 localhost 웹 페이지를 들어가면 사진과 같은 이미지가 떠서 상당히 당황했다

이제 이 문제를 해결하기 위해 설정 클래스를 만들것이다
🔴 SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/sign_up", "/css/**", "/js/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
);
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
1️⃣ 설정 클래스
| @Configuration | 해당 클래스가 스프링 설정 클래스임을 표시 |
| @EnableWebSecurity | 스프링 시큐리티 필터 체인 활성화 |
| @Bean | 스프링 컨테이너에 빈으로 등록 객체 생성과 등록을 담당하는 메서드에 붙인다 |
참고로 @Configuraion 가 위고, @EnableWebSecurity가 아래이다
이렇게 안 하면 import가 안 됐다
2️⃣ 접근 권한 설정
| .csrf().disable() | CSRF 보안 토큰 기능 비활성화 (폼 로그인 테스트 편의용) |
| .authorizeHttpRequests(auth -> auth | 특정 URL은 인증 없이 접근 허용 |
| .requestMatchers( . . . ).permitAll() |
그 외의 모든 요청은 로그인(인증) 필요 |
| .anyRequest().authenticated() | 권한 규칙을 안 준 모든 요청(any request) 로그인(인증) 필요 |
주로 Controller를 활용해서 data를 주고 받았는데
해당 매핑 주소에 권한을 주는 역할이다
Controller 뿐 아니라 외부 css폴더, js폴더 등도 등록할 수 있기에 권한 주기가 편해진다
- csrf().fisable()
- CSRF 공격 방지 기능을 끄는 것
- 실서비스에서는 반드시 켜두고, hidden input으로 CSRF 토큰 처리 필요
- 테스트 단계에서는 폼 전송이 안 막히도록 비활성화하는 경우가 많다
- authorizeHttpRequests
- 경로별 접근 권한 설정한다
- 예) /sign_up, /signup_save는 로그인 없이도 접근 가능하게 한다
- 나머지는 인증 필요
- requestMatchers( . . . ).permitAll()
- 특정 URL 패턴을 지정하여 접근 권한을 부여 하는 것
- /css/**, /js/** → 정적 리소스(css, js 파일)도 로그인 없이 접근 가능
- anyRequest().authenticated()
- 위 requestMatchers( . . . ) 외 모든 요청은 로그인 필요
3️⃣ 로그인 완료 설정
| .formLogin(form -> form . . . ) | 내가 만든 로그인 페이지 사용 (기본 시큐리티 로그인 화면 막기) |
| .loginPage("/login") | 로그인 성공 시 이동할 페이지 (홈 화면 등) |
| .defaultSuccessUrl("/") | 로그인 페이지 접근은 누구나 가능 |
| .permitAll() | 누구나 허용 가능 |
로그인 화면에서 ID, Password 입력 후에 로그인 버튼을 클릭 후
어디로 이동이 되는지를 표현한다
- 로그인 관련 설정
- loginPage("/login")
- 기본 시큐리티 로그인 창을 막고, 내가 만든 /login 페이지를 사용
- defaultSuccessUrl("/")
- 로그인 성공 후 홈( 컨트롤러에서 홈 주소를 " / "으로 설정했다 )으로 이동
- permitAll()
- 로그인 페이지는 로그인 안 해도 접근 가능해야 하므로 허용
4️⃣ 로그아웃 완료 설정
| .logout(logout -> logout . . . ) | 로그아웃 성공 시 이동할 페이지 |
| .logoutSuccessUrl("/") | 로그아웃 URL 접근은 누구나 가능 |
| .permitAll() | 누구나 허용 가능 |
- 로그아웃 처리
- logoutSuccessUrl("/")
- 로그아웃 성공 후 홈으로 이동
- permitAll()
- 로그아웃은 누구나 실행 가능
5️⃣ 비밀번호 암호화
| PasswordEncoder | 비밀번호를 암호화/검증할 때 사용하는 클래스 |
| new BCryptPasswordEncoder() | 해시 방식 |
- 회원가입 시 비밀번호를 DB에 넣을 때 반드시 이 인코더로 암호화해야 로그인 검증이 된다
이제 다시 실행을 돌리면
원래 작업하던 웹 페이지로 돌아온다
반응형
'SpringBoot > IntelliJ' 카테고리의 다른 글
| [ IntelliJ ] Spring Security로 역할 기반 접근 제어(RBAC) 구현하기: 관리자, 일반 회원, 비회원 권한 설정 가이드 (0) | 2025.10.08 |
|---|---|
| [ IntelliJ ] Spring Security 로그인 02 (0) | 2025.10.01 |
| [ IntelliJ ] JavaScript 활용 유효성 검사 ( 전화번호 ) (0) | 2025.09.29 |
| [ IntelliJ ] SpringBoot JavaScript 활용 유효성 검사 ( 비밀번호 확인 ) (2) | 2025.09.27 |
| [ IntelliJ ] Validation 유효성 검사 (4) | 2025.09.26 |