로그인할 때 필요하며, 인증 과 권한을 다루는 프레임워크다
로그인 또는 회원가입 할 때 유저정보가
다 db에 들어갈 텐데 그 데이터를 다룰 때 비밀번호 같은 경우엔 암호화를 해줘야함 그런것들을 도와줄거임
그외에 유효성검사 , 권한설정 , provider 구글 ,네이버 로그인 같은것도..
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1'
testImplementation 'org.springframework.security:spring-security-test'
}
이니셜라이저로 다운할 때 security 추가해놓고 작업할 땐 xml이건 , security건 방해되는 건 주석처리 해놓고 작업 후에 주석풀면서 진행하기
오류뜬다
※ spring boot 2.7.5 버전으로 진행해야 함
(기본버전이 상향됨으로 인해서 시큐리티 무료버전사용불가이슈)
boot starter 2.3.1
starter test 2.3.1
이렇게 해도 그래들은 X 표시되지만 서버는 돌아간다
로그인 후 연결될 페이지 , 로그인페이지 , 회원가입 페이지
@Controller
Public Class Pagecontroller{
@GetMapping({"/","/index})
public String loadIndex(){
return "index";
}
@GetMapping("/auth/signin")
public String loadSignin() {
return "auth/signin";
}
@GetMapping("/auth/signup")
public String loadSignup() {
return "auth/signup";
}
}
파일 구성의 경우 return을 보고 경로 추측가능
auth가 붙은 건 templates/auth패키지 안에 들어있는거임
안 붙어있는 건 그냥 templates에 있는 거
server:
port: 8000
servlet:
encoding:
charset: UTF-8
enabled: true
force: true
force-request: true
force-response: true
tomcat:
uri-encoding: UTF-8
spring:
# security:
# user:
# name: user
# password: 1234
mvc:
static-path-pattern: /static/**
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://
⏩️AWS의RDS 엔드포인트 및 포트/데이터베이스명⏪️?useUnicode=true&characterEncoding=UTF-8
username: ⏩️db아이디
password: ⏩️db비밀번호
mybatis:
mapper-locations:
- /mappers/*.xml
자동완성으로 넣을거임 복붙 해도 됨 그러고 url이랑 password만 신경쓰자
AuthFailerHandler → 계정정보가 틀렸을 때 웹에서 오류 띄워주는 곳
⭐️SecurityConfig → 시큐리티 구성 설정하는 곳 로그인할 url 설정 로그인 성공 후 띄워줄 url
실패하면 Failer로 연결해주기
@Configuration 환경설정 파일이라고 지정 ,
@EnableWebSecurity 모드 요청 url이 스프링 시큐리티의 제어를 받도록 만든 어노테이션
(사용자설정으로 만들어주는 것)
기존 어댑터 비활성화 하고 해당 config 활성화 하는 거
extends WebSecurityConfigurerAdapter
커스텀할 수 있게 상속 받기
http.csrf().disable(); → 비활성화 됨
http.authorizeRequests();
요청이 들어왔을 때 인증을 거치라는 의미
후에 메소드체이닝 마이페이지에오는 모든것들을 /**로 걸어줌 ( 로그인절차를 거치게 함 )
CSRF: http 요청을 보냈을 때 csrf 공격이 있으니까 토큰값을 부여해서 보안을 지키는 거
토큰값 : UUID
403에러가 발생하는 이유는 CSRF기능이 동작해서이다
그래서 일단 비활성화 걸어두기 작업하기
세션 : 기본적으로 응용프로그램에 로그인 되어있으나 새로운 동작, 이벤트 발생시에 관한 것
( 로그인 만료시간 동작 같은 거)

.loginProcessingUrl 아래에 작성
.failureHandler(new AuthFailerHandler()) // 로그인 오류시에 처리될 곳
(configure)메서드 시작전에 적어주기(비밀번호 암호화 복호화 메서드)
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
→ 비밀번호를 암호화해주는 것 → 그리고 서비스(구현) 에서 해당 비밀번호가 맞으면 복호화
userDetailService에서 복호화 진행하도록 작성해주기
HTML

loginProcessingUrl → 컨트롤러 역할 html에서 action “url”로 연결만 해주면 알아서 찾아감
형식 form태그 참고하기
User → user의 데이터가 담길 곳
UserRepository → 유저데이터들을 xml로 오갈곳
데이터유효성 오류처리 할 곳
어노테이션 만들 곳(Log , Timer)
예외 , 아이디 비번 맞지않거나 오류가 터질 때 모든걸 모아서 해결해줄 곳 → 핸들러 만들어줌
AuthFaillerHandler 오류처리 뷰
커스텀 annotation 만들어주는 곳
필수 어노테이션
@Aspect
@Component
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Pointcut("execution(* com.securitysecond.securitysecond.web.controller..*..*(..))")
private void pointCut() {}
@Pointcut("@annotation(com.securitysecond.securitysecond.handler.aop.annotation.Log)")
private void enableLog() {}
@Around ("enableLog()")
Logger 생성자느낌
Pointcut 어떤 동작될건지 지시해주는 거? 동작되는 경로를 맞춰주는 거?
@Around / @Before ,@AfterReturning 동작할 타이밍 잡아주는 거
PrincipalDetails → 서비스에서 받은 데이터를 커스텀해주는 곳 / 권한부여?(Granted) 관련도 같이 해줌
PrincipalDetailsService → 기본 서비스레이어 역할(로직처리)을 하고 만들어진 데이터를 Details로 보내줌
구현하면 loadUser 메소드 오버라이딩 됨 그 안에서 모든 DB필드를 username에 맞춘 걸 불러오는 쿼리문이랑 연동된다
authService / impl → 단순하게 username만을 db로 보낼 때 사용 (중복검사)
Controller
PageController 뷰
RestController 데이터 통신
GrantController 유저의 권한 관련 컨트롤러
AuthController 기존에 쓰던 것처럼 받아오는 서비스 컨트롤러
signupReqDto로 값을 받아서 toEntity로 구성해준다
어스 컨트롤러는 PrincipalService , AuthService 둘다 선언(의존성주입) 함
값을 보낼 땐 PrincipalService
읽을 땐 AuthService
Dto
데이터 유효성 검사할 SignupReqDto
단지 id만을 검사 할 UserNameCheckDto
데이터를 꾸며서 보내줄 CMResponseDto