본문 바로가기
관리자

Programming-[Backend]

(421)
[탐험]Spring MVC, String 전체 앞 뒤 공백 제거하기! - MappingJackson2HttpMessageConverter, @JsonFormat, StringTrimmerEditor 1. 목표 SpringMVC를 이용하는 프로젝트에서 클라이언트의 입력값으로 들어오는 String 문자열 값의 앞 뒤 공백을 제거한다. "이름" : " 컴퓨터 탐험가 " -> "이름" : "컴퓨터 탐험가" 위와 같이 String의 앞 뒤 공백을 제거하는 것을 Java, Spring 쪽에서는 trim이라고 한다(자바스크립트에서도). 이 글의 목표는 프로젝트 전체에서 String값을 trimming하는 방법에 대해 정리하는 것이다. 개별 필드에 대한 trim에 대해서도 조금은 다룬다. 2. 방법과 적용 범위 집중적으로 다룰려고 하는 내용은 프로젝트 전체에서 trim을 적용하는 방법이다. 다만 이럴 경우 사용자가 의도적으로 문자열 앞뒤로 공백을 넣는 경우는 작동하지 않게될 수 있다. 예를 들어 비밀번호 입력 시..
[스프링 시큐리티]25. Method 방식 : Map 기반 DB 연동 1. 원리 이해 이번에는 Method 방식을 적용하되, 어노테이션을 따로 추가하지 않고 DB에 저장된 resource-role 정보를 받아와서 특정 method에 권한 설정을 해주는 방식을 공부한다. 우선 원리 이해를 위해서 여지껏 공부해온 url방식과 method 방식의 작동 원리를 도식화하여 비교해본다. url 방식 url 방식에서 요청이 들어오면, FilterSecurityInterceptor를 상속한 객체가 FilterInvocationSecurityMetadataSource 정보를 받았다. 이 정보 안에 RequestMap이라는 Resource-Role 관계 정보가 담겨져 있었고, 이것을 DB로부터 받아서 인가처리를 하는데 사용했다. 실습때 SecurityConfig 설정파일에서 customFi..
[스프링 시큐리티]24. Method 방식 : 어노테이션 API 이해 1. 권한 종류 권한 어노테이션의 종류 @PreAuthorize, @PostAuthorize SpEL(Spring Expression Language)을 지원한다. @PreAuthorize("hasRole('ROLE_USER')and(#account.username == principal.username)") 과 같이 쓸 수 있다. PrePostAnnotationSecurityMetadataSource가 처리한다. @Secured, @RolesAllowed SpEL을 지원하지 않는다. @Secured("ROLE_USER"), @RolesAllowed("ROLE_USER")처럼 쓸 수 있다. SecuredAnnotationSecurityMetadataSource, Jsr250MethodSecurityMet..
[링크] 스프링 AOP 용어 개념 정리 AOP는 Aspect Oriented Programming의 약자이다. 관점에 따라 프로그래밍을 하겠다는 뜻이 된다. 코드에서 공통적으로 나타나는 부가적인 기능을 모듈화하여 하나의 관점(Aspect)로 바라보고 공통화한다. 주요개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능 PointCut : JointPoint의 상세한 스펙을 정의한..
[스프링 시큐리티]23. Method 방식 : 동작방식 및 구조 알아보기 1. 개요 페이지별 즉 화면 단위별 인가처리를 하는 것이 아니라 메소드 단위로 인가처리를 적용할 수 있는 방법이다. 예를 들어서 UserServiceImpl에 아래 처럼 order 메서드를 추가할 수 있다. 그리고 @Secured라는 어노테이션을 적용해서 해당 method에 접근할 때는 "ROLE_MANAGER" 권한이 있는지 검사하도록 할 수 있는 것이다. 어떠 방식으로 동작하는 지 그 구조와 원리에 대해서 학습해본다. @Override @Secured("ROLE_MANAGER") public void order() { System.out.println("order"); } 2. 동작 방식 서버를 실행할 때 초기화가 진행된다. 초기화 때 보안 어노테이션이 있는 빈의 프록시 객체를 만들고, 여기에 인가처..
[스프링 시큐리티]22. 아이피 접속 제한 ; AccessDecisionVoter 추가 1. Voter에 의한 인가 처리 방식 Voter에 의한 인가처리는 AccessDecisionManager에 의해 접근을 검사하는 것이고, 앞선 글의 계층 권한 처리에서 살펴본 것과 같은 방식으로 처리한다. 따라서 추가적인 Voter 구현체로 IpAddressVoter를 만들어주면 된다. 다시 말해 RoleHierarchyVoter 외에 IpAddressVoter를 추가하여 접속자의 Ip도 검사하는 방식이 된다. Voter의 결과 리턴값 public interface AccessDecisionVoter { int ACCESS_GRANTED = 1; int ACCESS_ABSTAIN = 0; int ACCESS_DENIED = -1; boolean supports(ConfigAttribute var1); ..
[스프링 시큐리티]21. 계층 권한 1. 계층 권한 적용 : RoleHierarchy, RoleHierarchyVoter 개념 User, Manager, Admin 권한이 있을 때, 보통은 Admin 권한이 있다면 User, Manager 권한을 갖도록 설계하는 것이 보통이다. 이런 권한 계층 관리를 해주는 것이 RoleHierarchy 객체이다. Rolehierarchy 객체는 String 구문으로 작성된다. 예를 들면 다음과 같다. ROLE_ADMIN > ROLE_MANAGER ROLE_ADMIN > ROLE_USER 부등호와 줄바꿈(\N) 기호를 통해서 구분하며, 하나의 String으로 작성되어야 한다. 부등호가 큰 쪽이 상위 계층이라는 의미가 된다. 이렇게 작성된 RoleHierarchy 객체를 RoleHierarchyVoter에 ..
[TIL][링크][작성중] 자바 어노테이션 및 리플렉션(Java Annotation, Reflection) 리플렉션 기초개념 어떤 클래스의 멤버 변수, 메서드 등을 호출할 수 있다. (예시 추가) class의 변수들은 그야말로 변수다. 아직 어떤 값이 지정될 지 모른다. 클래스의 변수들은 생성자를 통해 인스턴스가 생성되면서 그 값들이 정해지므로 constant 하지 못하다. 어노테이션에서 attribute로 지정하기 위해서는 constant해야만 한다. 따라서 클래스 자체를 어노테이션의 속성값으로 지정할 수는 없다. 리플렉션 사용 시 유의점 인스턴스가 이미 생성되있는 경우라면 굳이 리플렉션을 사용할 필요가 없다. 성능에 좋지 않다. 컴파일 단계에서는 확인 불가하고 런타임에서만 오류를 확인할 수 있다. .setAccessible(true) 메서드를 통해서 접근 지정자(Java Access Modifier)를 무..