[Spring] 게시판 만들기 10 – Spring Security 2

로그인까지 했으니 이제 

로그아웃.

계정, 권한 만들기,

admin 페이지를 만들어 보겠다.

1. 로그아웃 하기

우선 로그아웃 기능을 추가한다.

이전에 만든 SecurityConfig 에 내용을 추가한다.

http

                .sessionManagement((auth) -> auth

                        .sessionFixation().changeSessionId() //세션공격 보호

                        .maximumSessions(1) //세션 최대 개수

                        .maxSessionsPreventsLogin(false) //다중 로그인 시 처리방법 treu : 신규로그인차단, false : 기존세션삭제

                );

        http

                .logout((auth) -> auth

                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))

                .logoutSuccessUrl("/login")

                .invalidateHttpSession(true)

                .deleteCookies("JSESSIONID"));

로그인 관련 설정 및 /logout 절차 내용이다.

로그아웃 시 /login 페이지로 다시 돌려보낸다.

따로 /logout 을 매핑하지 않아도 security 가 알아서 처리해준다.

2. 권한 만들기

우선 테이블과 모델 클래스를 만든다.

@Data

public class Role {

    private String roleId;

    private String roleName;

    private String description;

}

권한Id, 이름, 설명 객체를 만들고

roleId 는 자동으로 증가하게끔, 나머진 nvarchar 로 대충 (쿼리문 어디간지 모르겠음)

(테이블 role1 로 지음)

@Data

public class RoleUser{

    private int userId;

    private int roleId;

}

권한과 유저를 매핑할 수 있는 테이블과 객체를 하나 생성

(테이블 role_user1 로 지음)

이후 이 권한을 이용해 게시판에도 내용을 넣을거니 게시판과 권한을 위한 테이블 하나 생성해줌.

@Data

public class Category {

    private String categoryId;

    private String categoryName;

    private String description;

    private String roleId;

}

게시판 카테고리 객체 및 테이블을 하나 만들어주고 (테이블 board_category)

CREATE TABLE board_role (

categoryId INT NOT NULL, -- board_category 테이블의 categoryId 컬럼을 참조

roleId INT NOT NULL, -- role1 테이블의 roleId 컬럼을 참조

PRIMARY KEY (categoryId, roleId),

FOREIGN KEY (categoryId) REFERENCES board_category(categoryId), -- board_category 테이블의 categoryId 컬럼을 참조

FOREIGN KEY (roleId) REFERENCES role1(roleId) -- role1 테이블의 roleId 컬럼을 참조

);

위처럼 매핑할 테이블도 하나 만들어주었다.

이후 Role 에 admin 을 위해 미리 데이터 하나 넣어줌.

insert into role1 (role_id, role_name) values (1, 'ROLE_ADMIN');

insert into role_user1 (username, role_id) values ('admin', 1);

이전에 만든 admin 이라는 계정에, ROLE_ADMIN 이라는 권한을 생성해서 그 권한을 부여해주었다.

Spring Security 권한은 기본적으로 ROLE_XXXX 형태로 만들면된다.

3. admin 페이지 작성

어드민 계정 및 권한도 만들었으니 나머지는 이제 이 권한을 사용해서 페이지를 통해 생성해볼 수 있게 만들어본다.

우선 페이지를 만들었는데,

WEB-INF/jsp 아래 admin 이라는 폴더를 하나 더 만들어서 다른 jsp 파일들과 구분을 지을 수 있게끔 만들었다.

그리고 흩어져있는 CSS들을 하나로 관리하기 위해 CSS파일을 하나 만들었다.

main.css 내용

body:nth-of-type(1) {

    font-family: Arial, sans-serif;

    background-color: #f2f2f2; /* 연한 회색 배경색 적용 */

    padding: 20px; /* 바깥쪽 여백 추가 */

}

table {

    border-collapse: collapse;

    width: 90%;

    margin: 20px auto;

}

table, th, td {

    border: 1px solid #ccc;

}

th, td {

    padding: 8px;

}

th:first-child,

td:first-child {

    width: 5%;

}

a {

    text-decoration: none;

    color: #007bff;

}

a:hover {

    text-decoration: underline;

    color: #0056b3;

}

    main {

        display: flex;

        flex: 1;

    }

    nav {

        width: 200px;

        background-color: #eaeaea;

        padding: 10px;

    }

    section {

        flex: 1;

        padding: 10px;

    }

    .index{

        display: flex;

        justify-content: center;

    }

우리 챗GPT 작품

Leave a Comment