본문 바로가기
728x90
반응형

로그인까지 했으니 이제 

 

로그아웃.

계정, 권한 만들기,

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 작품

 

 

728x90
반응형

한걸음 한걸음

개인적인 기록