본문 바로가기

분류 전체보기

(135)
SpringSecurity(CSRF,CsrFilter) 그림을 보면 사용자가 공격자에게 링크를 전달받고 공격자의 Html로 접속 한경우다 페이지 안에는 현재 사용자가 접속한 쇼핑몰 url 과 공격자 주소를 파라미터로 받게끔 코딩을 해놨다. 쇼핑몰이 발급한 쿠키는 사용자의 브라우저에 저장이 되어있다. 사용자가 링크를 클릭하면 해당하는 쇼핑몰로 요청을 하게되고 현재 사용자는 인증과 인가를 받고 쿠키를 발급 받은 상태이기 때문에 공격자는 정상적으로 사용자의 계정으로 쇼핑몰에 접근이 가능하다. 이방법이 CSRF(사이트 간 요청 위조) 이다 Form 인증 - CsrFilter 모든 요청에 랜덤하게 생성된 토큰을 Http 파라미터로 요구 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다 클라이언트는 토큰명(name="..
SpringSecurity(인증/인가 API-ExceptionTranslationFilter) AuthenticationException AuthenticationEntryPoint 호출하게 되는데 SpringSecurity가 구현체를 제공한다 AuthenticationEntryPoint 사용자가 직접 구현해서 호출할수도 있다, 인증된 사용자만 서버자원에 접근이 가능한데 만약 인증없이 서버자원에 접근할려면 로그인 페이지로 이동하게 처리한다 이때 인증예외가 발생하기전에 그사용자가 가고자 했던 자원정보를 저장한다 그러면 로그인에 성공을 하게 되면 이전에 사용자가 접근하려고 했던 서버자원으로 이동하게 처리한다 (RequestCache) 예외가 발생하기전 파라메터 값과 헤더값을 저장한다 (SavedRequest) AccessDeniedExeption SecurityIntercepter 클래스가 Acces..
SringSecurity(기본API & Filter이해) 선언적 방식 URL http.antMatchers("/users/**").hasRole(“USER") Method @PreAuthorize(“hasRole(‘USER’)”) public void user(){ System.out.println(“user”)} 동적 방식 – DB 연동 프로그래밍 URL Method URL 방식에 대해서 한번 살펴 보기로 한다 @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher(“/shop/**”) // 사용자의 요청이 설정한 경로로 접근할때만 설정클래스의 보안기능이 호출 만약 다른경로로 호출하게 된다면 보안기능이 호출되지 않는다. 특정한 자원 경로로 제한하고자 할때..
람다식(3) 로컬 변수 사용 람다식은 메소드 내부에서 주로 작성되기 때문에 로컬 익명 구현 객체를 생성시킨다고 봐야한다. 람다식에서 바깥 클래스의 필드나 메소드는 제한 없이 사용할 수 있으나 메소드의 매게변수 또는 로컬 변수를 사용하면 이 두 변수는 final 특성을 가져야 한다. 따라서 매게 변수 또는 로컬 변수를 람다식에서 읽는 것은 허용되지만, 람다식 내부 또는 외부에서 변경할 수 없다. public class UsingLocalVariable{ void method(int args) { // arg는 final 특성을 가짐 int localVar = 40; //localVar는 final 특성을 가짐 //arg =31; //final 특성때문에 변경불가 //localVar = 31; // final 특성떄문에..
람다식(2) 리턴 값이 있는 람다식 다음과 같이 매게 변수가 있고 리턴값이 있는 추상 메소드를 가진 함수적 인터페이스가 있다고 해보자 public interface MyFunctionalInterface{ public int method(int x, int y); } 인터페이스를 타켓 타입으로 갖는 람다식은 다음과 같은 형태로 작성해야한다. 람다식에서 매게변수가 두 개인 이유는 method()가 매게변수를 두개 가지기 때문이다. 그리고 method()가 리턴 타입이 있기 때문에 중괄호 {..}에는 return문이 있어야한다. MyfunctionalInterface fi = (x,y) -> {..return값;} 만약 중괄호 {}에 return문만 있고 return문 뒤에 연산식이나 메소드 호출이 오는 경우라면 다음과..
람다식이란? 람다식은 익명함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수지향 언어에 가깝다. 객체 지향 프로그래밍에 익숙한 개발자는 다소 혼란서러울 수 있찌만, 자바에서 람다식을 수용한 이유는 코드가 매우 간결해지고 컬렉션의 요소를 필터링 하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있기 때문이다. 람다식의 형태는 매게 변수를 가진 코드 블록이지만 런타임 시에는 익명 구현 객체를 생성한다. 람다식 -> 매게 변수를 가진 코드 블록 -> 익명 구현 객체 예를 들어 Runbable 인터페이스의 익명 구현 객체를 생성하는 전형적인 코드는 다음과 같다. Runnable runnable = new Runnable(){ public void run(){..} } 위코드를 람다식으로 ..
Rest REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.따라서 REST방식은 다음과 같이 구성된다고 생각할수 있습니다. 따라서 REST는 Representational State Transfer 약자로 웹의 장점을 최대한 활용활 수 있는 아키텍처 이다. REST와 관련해서 알아 두어야 하는 어노테이션들은 다음과 같습니다. REST 방식에서 가장 먼저 기억해야 하는점은 서버에서 전송하는 것이 순수한 데이터라는 점입니다. 기존의 Contrller에서Model에 데이터를 담아서 JSP등과 같은 뷰(View)로 전달하는 방식이 아니므로 기존의 Controller와는 조금 다르게..
DAO, DTO, VO DAO DAO(Date-Access-Object)나 Repository(저장소) 라는 이름으로 영역을 따로 구성하는 것이 보편적입니다. 다만 별도의 DAO를 구성하는 대신에 MyBatisd의 Mapper인터페이스를 활용합니다.데이터베이스의 data에 접근하기 위한 객체입니다.DataBase 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용합니다. DTO = VO VO와 DTO는 일반적으로 유사한 의미로 사용하는 용어로, 데이터를 담고 있는 객체를 의미한다는 공통점이 있습니다 다만, VO의 경우는 주로 ReadOnly의 목적이 강하고, 데이터 자체도 불변하게 설계하는 것이 정석입니다. DTO는 주로 데이터 수집의 용도가 좀 더 강합니다. 웹화면에서 로그인하는 정보를 DTO로 처리하는 방식을 사용..