1. 게시물에 번호 지정하기
▼게시물 번호 공식
게시물 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스
만약 게시물이 12개이고 한 페이지에 보여지는 게시물이 10개면
1페이지에는 12, 11, 10, 9, 8, 7, 6, 5, 4, 3 번의 게시물이 보여야하고
0페이지에는 2, 1 번의 게시물이 보여야 한다.
2. 답변 개수 표시하기
다음과 같이 question_list 에 코드를 추가하면 게시물 옆에 답변의 개수가 출력된다.
3. 스프링 시큐리티 설정하기
스프링 시큐리티란 회원가입과 로그인을 도와주는 프레임워크이다.
스프링 시큐리티를 사용하기 위해 다음과 같이 build.gradle 파일을 수정한다.
형광색 부분의 코드를 삽입하고 refresh 한 다음 다시 서버를 재가동하면
다음과 같이 아이디, 비번 형식의 로그인 창이 뜨게 되는데
이는 스프링 시큐리티는 기본적으로 인증되지 않은 사용자가 웹 서비스를 사용할 수 없게끔 만들기 때문이다.
하지만 로그인하지 않아도 게시글은 조회할 수 있도록 만들기 위해 아래와 같은 과정을 거친다.
먼저 다음과 같이 SecurityConfig.java 라는 파일을 작성하는데
우선 애너테이션과 코드를 하나씩 풀어보면
@Configuration 애너테이션은 이 파일이 스프링의 환경 설정 파일임을 의미한다.
@EnableWebSecurity 는 모든 요청되는 URL이 스프링 시큐리티의 제어를 받도록 하는 애너테이션이다.
즉 스프링 시큐리티를 활성화한다.
@Bean 은 이 메소드가 스프링 콘텍스트에 빈으로 등록됨을 나타낸다.
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
SecurityFilterChain filterChain(HttpSecurity http) 는 HTTP 보안을 설정하는 메소드이며
여기서 HttpSecurity 는 HTTP 요청 보안을 설정하는데 사용되는 주요 클래스이다.
http
.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(new AntPathRequestMatcher("/**")).permitAll())
다음 코드는 인증되지 않은 모든 페이지의 요청을 허락한다는 의미이다.
따라서 로그인 하지 않아도 모든 페이지에 접근 가능하게 한다.
.csrf((csrf) -> csrf
.ignoringRequestMatchers(new AntPathRequestMatcher("/h2-console/**")))
http.csrf() 는 CSRF 보호를 설정한다.
.ignoringRequestMatchers(new AntPathRequestMatcher("/h2-console/**"))) 코드는
H2 데이터베이스 콘솔 접근을 허용하기 위해 CSRF 보호를 비활성한다는 의미이다.
.headers((headers) -> headers
.addHeaderWriter(new XFrameOptionsHeaderWriter(
XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN)));
http.headers() 는 HTTP 응답 헤더를 설정한다.
.addHeaderWriter(new XFrameOptionsHeaderWriter( XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))); 코드는 X-Frame-Options 헤더를 SAMEORIGIN 으로 설정하여 동일 출처에서만 프레임을 허용한다는 의미이다.
'SpringBoot > 스프링부트 스터디' 카테고리의 다른 글
스프링부트 스터디 6주차 - read 기능 구현 (0) | 2024.06.25 |
---|---|
스프링부트 스터디 5주차 - update, delete 기능 구현 (0) | 2024.06.22 |
스프링부트 스터디 4주차 - 회원가입, 로그인 기능 (0) | 2024.06.22 |
스프링부트 스터디 2주차 - 공통템플릿/내비게이션바/페이징기능/최신데이터 출력 (0) | 2024.06.20 |
스프링부트 스터디 1주차 - create 기능 구현 (0) | 2024.05.26 |