Spring legacy 18

스프링 시큐리티 어노테이션

스프링 시큐리티 어노테이션 주로 사용하는 세 가지 어노테이션 @Secured 스프링 시큐리티 초기부터 사용했다. ()안에 'ROLE_ADMIN' 같은 문자열 또는 문자열 배열을 이용한다. @PreAuthorize, @PostAuthorize 스프링3버전부터 지원한다. ()안에 표현식을 사용할 수 있어서 최근에는 더 많이 사용한다. http.authorizeRequests() .antMatchers("/sample/all").permitAll() .antMatchers("/sample/member").access("hasRole('ROLE_MANAGER')") .antMatchers("/sample/admin").access("hasRole('ROLE_ADMIN'..

Spring legacy 2020.09.13

JSP에서 스프링 시큐리티 사용하기

JSP에서 스프링 시큐리티 사용하기 스프링 시큐리티 관련 정보를 출력하려면 시큐리티 관련 태그 라이브러리를 선언해야 한다. 태그는 과 principal이라는 이름의 속성을 사용한다. 사용 예제 admin.jsp ... principal : MemberVO : 사용자 이름 : 사용자 아이디: 사용자 권한 : .. ...결과 표현식을 이용하는 동적 화면 어떤 페이지에서, 일반 사용자로 로그인했을 때 보여지는 내용과, 관리자로 로그인 했을 때 보여지는 내용이 달라야 한다면(이를테면 관리자용 메뉴 같은 것) 표현식을 이용하여 동적으로 구성할 수 있다. 표현식 설명 hasRole([role]) hasAuthority([authority]) 해당 권한이 있으면 true hasAnyRole([role,role2]) ..

Spring legacy 2020.09.13

Spring Security - UserDetailsService

UserDetailsService JDBC를 이용한 인증방식의 단점은 사용자의 여러 정보들 중에서 제한적인 내용만을 이용한다는 점이다. 스프링 시큐리티에서는 username이라고 하는 정보만을 이용하므로 이름이나 이메일 등 자세한 정보를 이용할 경우 충분하지 못하다. UserDetailsService이스를 구현하는 방식으로 이러한 문제를 해결할 수 있다. UserDetailsService는 loadUserByUserName이라는 하나의 메서드만 가지고 있다. loadUserByUserName()는 UserDetails를 반환하는데, UserDetails는 사용자의 정보와 권한 정보를 담는 인터페이스다. UserDetails는 getAuthorities(), getPassword(), getUserName..

Spring legacy 2020.09.13

Spring Security - 기존 테이블을 이용하는 인증방법

기존의 테이블을 이용한 시큐리티 인증 방법 1. 테이블 설계 회원 테이블과 권한 테이블 -- 회원 테이블 create table tbl_member( userid varchar(50) not null primary key, userpw varchar(100) not null, username varchar(100) not null, regdate timestamp default now(), moddate timestamp default now(), enabled char(1) default '1' ); -- 권한 테이블 create table tbl_member_auth( userid varchar(50) not null, auth varchar(50) not null, constraint fk_memb..

Spring legacy 2020.09.13

UriComponentBuilder

UriComponentBuilder 게시물을 POST방식으로 처리하고 나서도 페이지나 검색 조건을 유지하기 위해서는 페이지 정보와 검색 조건, 검색 키워드 정보를 RedirectAttribute객체로 직접 지정해야 했다. @PostMapping("/modify") public String modify(BoardVO boardVO, PageInfo pageInfo,RedirectAttributes redirect) { log.info("/board/modify"); log.info("BoardVO : " + boardVO); int result = boardService.modify(boardVO); log.info("MODIFY RESULT : " + result); redirect.addAttribut..

Spring legacy 2020.09.12

Spring 게시판 구현 - Presentation Layer II

Presentation Layer II 화면 CRUD 레이아웃은 BootStrap4의 Sb Admin을 이용했다. 링크 폴더 구조는 이렇다. /board/list /board/write /board/post post페이지에서 수정 따로 수정 페이지를 만들지 않고 자바스크립트를 이용하여 조회 페이지에서 바로 수정할 수 있도록 했다. /board/remove 모달 창을 쓸까, 말까 고민했지만 쓰지 않기로 했다. 네이버나, 페이스북 같은 웹에서 게시물을 삭제했을 때, 따로 삭제했다는 메세지 같은 것을 받은 기억이 없다. 따라서 굳이 필요한가... 있어도 되고 없어도 되는 기능이고, 없다고 사용자 입장에서 불편한 기능이 아니라고 판단해서 사용하지 않았다. 코드가 궁금하다면 참고 페이징 게시글을 조회했다가, 다시..

Spring legacy 2020.09.12

Spring 게시판 구현 - Presentation Layer

Presentation Layer 컨트롤러와 화면처리를 담당할 jsp가 프레젠테이션 계층이다. 컨트롤러를 완성하고 화면처리를 할 것이다. URL분기는 참고 달라진 점은 수정 페이지를 따로 만들지 않고 자바스크립트를 이용해서 처리할 것이므로 따로 분기하지 않았다. 컨트롤러 @Controller @RequiredArgsConstructor @RequestMapping("/board") @Log4j public class BoardController { private final BoardService boardService; @GetMapping("/list") public void getAllPost(Model model) { log.info("/board/list"); model.addAttribute("..

Spring legacy 2020.09.12

Spring 게시판 구현 - Business Layer

Business Layer 비지니스 계층은 'Service'라는 이름을 주로 사용한다. BoardService라는 인터페이스를 만들고 BoardServiceImpl클래스가 구현하는 형태로 만들 것이다. 굳이 인터페이스를 중간에 두는 이유는 다음에 구현할 프레젠테이션 계층과 강결합을 피하기 위해서다. service패키지 생성 public interface BoardService { Long register(BoardVO boardVO); List getAllPost(); BoardVO getPost(Long bno); int modify(BoardVO boardVO); int remove(Long bno); } @Service @RequiredArgsConstructor @Log4j publ..

Spring legacy 2020.09.12

Spring게시판 구현 - Data/Persistence Layer

영속 계층 구현 순서 VO 생성 @Data @Builder public class BoardVO { private Long bno; private String title; private String content; private String writer; private Date regdate; private Date moddate; } MyBatis Mapper인터페이스 & Mapper.xml public interface BoardMapper { int insert(BoardVO boardVO); List getAllPost(); BoardVO getPost(Long bno); int update(BoardVO boardVO); int delete(Long bno); Long lastInsertId()..

Spring legacy 2020.09.12

Spring 게시판 구현 준비

요구사항 사용자는 게시물을 등록할 수 있다. 사용자는 게시물을 조회할 수 있다. 사용자는 게시물을 수정할 수 있다. 사용자는 게시물을 삭제할 수 있다. 레이아웃 무료로 제공하는 부트스트랩을 이용할 것이다. 링크 URL 설계 URL 전송 방식 비고 /board/list GET 전체 게시물 목록 /board/write GET 게시물 등록 양식 /board/write POST 게시물 등록 처리 /board/post GET 게시물 조회 /board/modify GET 게시물 수정 양식 /board/modify POST 게시물 수정 처리 /board/remove POST 게시물 삭제 데이터베이스(MySQL) CREATE TABLE `tbl_board` ( `bno` int NOT NULL AUTO_INCREMEN..

Spring legacy 2020.09.12