읽은 책 정리/코드로 배우는 스프링 웹 프로젝트 19

[Spring] 37 기존 프로젝트에 스프링 시큐리티 접목하기

-스프링 시큐리티를 사용할때 POST 방식의 전송은 반드시 CSRF 토큰을 사용하도록 추가해야한다. 기존의 프로젝트에 시큐리티 접목하는 작업은 아래와 같은 순서로 진행 한다. 1) 로그인, 회원가입 페이지 작성 2) 기존화면과 컨트롤러에 시큐리티 관련 내용 추가 3) Ajax 부분의 변경 -기존의 예제에서 새로운 프로젝트를 작성한다. 관련 설정 추가 * security-context.xml 추가 / org.zerock.security 및 이하 패키지 추가 / org.zerock.domain 내에 MemberVO와 AuthVO 클래스 추가/ web.xml에 security-context.xml 설정과 필터 추가 / MemberMapper 인터페이스와 MemberMapper.xml 추가 / org.zeroc..

[Spring] 36 어노테이션을 이용하는 스프링 시큐리티 설정

스프링 시큐리티 역시 다른기능들처럼 어노테이션을 이용해서 필요한 설정을 추가할수 있다. 사용되는 어노테이션은 주로 @Secured - 스프링 시큐리티 초기부터 사용되었고, () 안에 'ROLE_ADMIN'과 같은 문자열 혹은 문자배열을 이용한다 @PreAuthorize,@PostAuthorize - 3버전부터 지원되며, () 안에 표현식을 사용할수 있으므로 최근에 많이사용 예제를 위해 컨트롤러에 추가해본다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MEMBER')") @GetMapping("/annoMember") public void domember2() { log.info("로그인 어노테이션 멤버")..

[Spring] 35 자동 로그인(remember-me)

한번 로그인을 하면 일정시간동안 다시 로그인을 하지 않아도 되는 기능이 있다(자동로그인or 로그인기억하기) 영어로는 'remember-me' 라고하는데 이 기능은 대부분 쿠키(Cooke)를 이용해 구현한다. 스프링 시큐리티의 경우 'remember-me' 기능을 메모리상에서 처리하거나, DB를 이용하는 형태로 약간의 설정만으로 구현 가능하다. security-context.xml에 태그를 이용해서 구현한다. 아래와 같이 여러 속성값을 지정할수 있다. 주로 사용되는 속성은 아래와 같다 key 쿠키에 사용되는 값을 암호화 하기 위한 키(Key)값 data-source-ref DataSource를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록(옵션) remember-me-cookie 브라우저에 보관되는 ..

[Spring] 34 스프링 시큐리티를 JSP에서 사용하기

JDBC와 약간의 쿼리를 이용하는것만으로도 DB를 이용해 시큐리티를 사용할수 있음에도 불구하고, 굳이 CustomUserDetailsService와 같이 별도의 인증/권한 체크를 하느 가장 큰이유는 JSP 에서 단순히 사용자의 아이디(시큐리티에서는 username)정도가 아닌, 사용자의 이름이나 이메일과 같은 추가적인 정보를 이용하기 위해서이다!!!! pom.xml 에서 시큐리티를 이용할떄 사용하는 태그라이브러리를 추가해둿으므로 JSP 에서 이를 활용하는 방법에대해 알아본다. JSP에서 로그인한 사용자 정보 보여주기 /sample/admin 과 같은 경로는 로그인한 사용자만 접근할수 있고, 만일 권한이 적당하지않으면 볼수없는 페이지므로 , 로그인한 사용자가 접근 했을떄에는 해당 사용자의 여러정보를 보여줄..

[Spring] 33 커스텀 UserDetailsServices 활용

JDBC를 이용하는 방식으로도 DB를 처리해서 사용할수 있지만, 여러 정보들중 제한적인 내용만 이용 한다는 단점이 존재 이러한 문제를 해결하기위해 UserDetailsServices 인터페이스를 구현하는 방식을 이용하는것이 좋다. ( 원하는 객체를 인증과 권한 체크에 활용 할수 있기에 많이 사용된다) UserDetailsServices 인터페이스는 단 하나의 메서드만 존재한다. 가장 일반적으로 많이 사용되는 방법은 하위 클래스 중에서 org.springframework.security.core.userdetails.User 클래스 상속 하는형태이다. 커스텀 UserDetailsService를 이용하는 방식을 이용하기 위해선, MYbatis를 이용하는 MemberMapper와 서비스를 작성하고, 이를 시큐..

[Spring] 32 JDBC를 이용하는 간편 인증/권한처리

인증과 권한에 대한 처리는 크게 보면 Authentication Manager를 통해 이루어지는데, 1) 이때 인증이나 권한 정보를 제공하는 존재(Provider)가 필요하고, 2) 다시 이를 위해 UserDetailsService 라는 인터페이스를 구현한 존재를 활용하게 된다. UserDetailsService는 이미, 시큐리티 API 내에 이미 많은 클래스가 제공되고 있다.. 찾아보자,,,,, 이번에는 기존 DB가 존재하는 상황에서 Mybatis나 기타 프레임워크없이 사용하는 방법을 공부한다 JDBC를 이용하기 위한 테이블 설정 -JDBC를 이용하는 경우 사용하는 클래스는 JdbcUserDetailsManager 클래스 인데, github 등에 공개된 코드를 보면 SQL문이 선언되있다 github.c..

[Spring] 31 로그인과 로그아웃 처리

스프링 시큐리티의 내부 구조는 상당히 복잡하지만, 실제 사용은 약간의 설정만으로 처리가 가능하다..! 접근제한설정 security-context.xml 에 접근제한 설정 추가 한다. 특정한 URI에 접근할때 인터셉터를 이용해서 접근을 제한하는 설정은 를 이용한다. pattern 이라는 속성(URI의 패턴을 의미) 과 access(권한체크)라는 속성을 지정해야한다. access의 속성값으로 사용되는 문자열은 . 1) 표현식과 2)권한명을 의미하는 문자열을 이용한다. 기본설정이 표현식을 이용하는것인데, 단순 문자열을 이용할수 있지만 권장x 이기때문에 표현식을 사용한다. 1 2 3 4 5 6 7 8 9 10 11 Colored by Color Scripter cs 설정하고 /sample/member로 접근하면..

[Spring] 30 Spring web Security 설정과 기본원리 소개

스프링 시큐리티의 기본동작은 서블릿의 여러종류의 필터와 인터셉터를 이용해 처리 된다 필터 - 서블릿에서 말하는 단순한 필터 인터셉터 - 스프링에서 필터와 유사한 역할 결정 적인 차이는 필터는 > 스프링과 무관하게 서블릿자원 인터셉터는 > 스프링의 빈으로 관리되면서 스프링의 컨텍스트내에 속한다 이론은 나중에 따로 공부하도록 하고 실습을 해보자.. 1) ex06 프로젝트를 생성하고, 스프링 버전을 조정하자 스프링 시큐리티는 스프링의 여러 하위 프로젝트중 하나이므로 필요한 버전을 추가( 다양한 처리를 위해 여러개 추가) pom.xml 에 라이브러리를 추가(3개의 라이브러리는 동일한 버전으로 맞추기) JSP 에서 스프링 시큐리티 관련된 태그 라이브러리를 활용할수 있도록 spring -sucurity -tagli..

[Spring] 16 REST 방식으로 전환

모바일 시대가 되면서 WEB분야의 가장 큰 변화는 서버 역할의 변화라고 할수 있다. 과거에는 서버의 데이터를 소비하는 주체가 '브라우저'라는 특정한 애플리케이션으로 제한적이었다면, 모바일의 시대가 되면서 앱이나 웹은 서버에서 제공하는 데이터를 소비하게 된다. 과거의 서버는 브라우저라는 하나의 대상만을 상대로 데이터를 제공했기때문에, 아예 브라우저가 소화가능한 모든 데이터를 HTML이라는 형태로 전달하고, 브라우저는 이를 화면에 보여주는 역할을 해왔다. 스마트폰에서는 앱(APP)이라 불리는 고유한 애플리케이션을 이용해서, 데이터를 소비하게 되고 보이는 화면 역시 자신만의 방식으로 서비스 하게된다. 앱에서 서버에 기대하는 것은 완성된 HTML이 아니라 그저 자신에게 필요한 순수한 데이터만을 요구하게 되었다...

[Spring] 14 페이징 화면처리

1 2 3 4 5 Colored by Color Scripter cs 페이지를 보여주는 작업은 다음과 같은 작업을 통해서 진행한다. - 브라우저 주소창에서 페이지 번호를 전달해서 결과를 확인하는 단계 - JSP에서 페이지 번호를 출력하는 단계 - 각 페이지 번호에 클릭 이벤트 처리 - 전체 데이터 개수를 반영해서 페이지 번호 조절 페이지 처리는 단순히 링크의 연결이기 때문에 어렵지 않지만, 목록페이지에서 조회페이지, 수정 삭제 페이지까지 페이지 번호가 계속 유지되어야 하기때문에 신경 써야할게 많다. 14.1 페이징 처리 할때 필요한 정보들 - 현재 페이지 번호(page) - 이전과 다음으로 이동 가능한 링크의 표시 여부(prev,next) - 화면에서 보여지는 페이지의 시작 번호와 끝 번호(startPa..