본문 바로가기

Programming/Java * Spring31

[SpringBoot] JWT(Json Web Token) 활용한 인증 처리 담당 기능에서 외부 시스템과의 연동을 위해 JWT(Json Web Token)을 활용한 인증 처리가 필요했다. JWT는 자바 뿐만 아니라 .Net, C, C++, Go, JavaScript 등 거의 대부분의 프로그램 언어를 지원하는 인터넷 표준 인증 방식이다. 토큰 구성은 크게 Header / Payload / Signature 이며, 연동 시스템에서 요구한 명세는 아래와 같았다. Header - type : 말그대로 토큰 타입이 "JWT" 라는 의미 - alg : 알고리즘은 HMAC SHA-256 을 사용하였으며, 파라미터는 밸류는 "HS256". 알고리즘 타입별 상세 정보는 아래 RFC 공식 문서를 참고하는 것이 좋다. https://www.rfc-editor.org/rfc/rfc7518#sectio.. 2023. 4. 15.
[Java] MyBatis 동적 쿼리 - trim, where, set 검색 또는 업데이트 조건을 동적으로 받는 경우 자주 사용하는 MyBatis 문법에 대해 정리해보고자 한다. 1. 태그만 사용할 때는 각각의 조건들만 동적으로 추가 가능했지만, 태그를 사용하게 되면 태그 하위의 태그 리턴 값에 따라 조건문 자체를 동적으로 active 시킬 수 있다. 하위의 태그 값을 모두 충족하지 않으면 WHERE가 생기지 않고 SQL 종결되며, 하나라도 충족하면 SQL에 WHERE가 붙는다. 하위 태그에는 AND || OR 모두 받을 수가 있다. 불필요한 AND 또는 OR 구문을 제거해준다. 1) 태그 사용하지 않을 때 HTML 삽입 미리보기할 수 없는 소스 안의 모든 조건이 충족하지 않는 경우 위의 구문은 아래과 같이 오류를 발생시킨다. HTML 삽입 미리보기할 수 없는 소스 2) 태.. 2022. 6. 27.
[Spring] 하나의 requestMapping으로 여러개의 request 받기 스프링의 컨트롤러 단에서 구현부가 동일하거나 거의 유사한 requestMapping을 여러 개 만들어야 하는 상황이 발생한다. 이때 중복코드를 줄이기 위해 하나의 requestMapping에서 여러 요청을 처리하는 방법이 있다. 1. 먼저 요청을 병렬로 받는다. @RequestMapping(value = {"/boardUpdateForm", "/boardDelete"}) cs 2. 그리고 아래 문법을 사용하면 요청이 들어오는 url을 뽑아주므로 처리와 return을 다르게 하고 중복코드를 줄일 수 있다. (String)request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); cs 3. 예시는 다음과 같다. @RequestMap.. 2019. 12. 20.
[SpringBoot] No embedded stylesheet instruction for file 해결 방법 (out.xml 파일이 자동으로 생성되면서 서버가 켜지지 않음) [ 문제 ] 스프링 부트 프로젝트를 실행할 때 첨보는 에러 발생. 에러 메세지의 경로로 들어가보니 out.xml 파일이 자동으로 생성되어 있었음. 삭제해도 서버를 실행하면 좀비처럼 다시 생긴다. eclipse tab에서 xml 파일이 열려있기 때문에 xml을 실행하려고 해서 문제가 발생한 것. [ 해결 ] out.xml 삭제 project clean tab에서 xml 파일을 모두 닫고 실행할 .java 파일만 남겨둔 채로 서버를 실행했더니 해결 되었음. 도움 받은 곳: https://stackoverflow.com/questions/7980037/why-out-xml-file-is-created 2019. 11. 18.
[Spring Boot] Authorization Server(feat. Postman) grant-type : 클라이언트 인증 방식 AUTHENTICATION: BASIC base64Encode(clientId+ ':' + password) Spring에서 지원하는 Oauth Structure CREATE TABLE OAUTH_CLIENT_DETAILS ( CLIENT_ID VARCHAR(255) PRIMARY KEY, RESOURCE_IDS VARCHAR(255), CLIENT_SECRET VARCHAR(255), SCOPE VARCHAR(255), AUTHORIZED_GRANT_TYPES VARCHAR(255), WEB_SERVER_REDIRECT_URI VARCHAR(255), AUTHORITIES VARCHAR(255), ACCESS_TOKEN_VALIDITY INTEGER, REF.. 2019. 7. 10.
MyBatis 사용 목적, 셋팅, Log4j(로그 출력) 1. MyBatis 사용 목적 - 개발과 유지보수가 쉽도록 소스 코드에 박혀있는 SQL을 별도의 파일로 분리 - 단순하고 반복적인 JDBC 코드를 캡슐화하여 데이터베이스 프로그래밍을 간결하게 만듦 2. 라이브러리 다운로드 및 셋팅 경로 github.com/mybatis/mybatis-3/releases mybatis/mybatis-3 MyBatis SQL mapper framework for Java. Contribute to mybatis/mybatis-3 development by creating an account on GitHub. github.com 3. 환경 설정 (JDBC/JNDI) 1) config.xml 파일 생성 : SqlSessionFactory가 sqlSession 객체를 제공할때 .. 2019. 6. 13.
[JSP] 리플렉션 API를 사용한 프론트 컨트롤러 자동화 기존 MVC 모델에서 페이지를 추가하면 프론트 컨트롤러에서 파라미터 값을 받기 위해 객체를 추가하는 코드를 매번 추가/수정해주어야 한다. 그런데 리플렉션 API를 사용하면 객체 생성의 자동화를 통해 이 불편한 과정을 개선할 수 있다. 아래의 그림처럼 프론트 컨트롤러가 페이지 컨트롤러에 필요한 데이터를 물어보고, 클래스의 이름(문자열)을 추출해 그에 따른 객체를 생성해주는 흐름으로 자동화가 이루어진다. 1. 리플렉션 API 다운로드 : 자바 lang 패키지에서 기본적으로 제공하는 리플렉션 API도 있고, 외부 라이브러리를 다운받아 임포트 해도 된다. https://code.google.com/archive/p/reflections/ Google Code Archive - Long-term storage f.. 2019. 6. 12.
[JSP] DataSource의 장점과 셋팅 방법 DataSource는 java.sql 패키지의 기능을 보조하기 위한 javax.sql 패키지에 들어있다. DataSource는 java.sql 패키지의 DriverManager를 통해 DB 커넥션을 얻는 것에 비해 다음과 같은 장점을 가지고 있다. 1) 서버에서 관리하기 때문에 데이터베이스나 JDBC 드라이버가 변경되더라도 애플리케이션을 바꿀 필요가 없다. 2) 자체적으로 커넥션풀 기능을 구현하기 때문에 웹 애플리케이션 쪽에서 따로 작업할 것이 없다. 3) Connection과 Statement 객체를 풀링할 수 있다. 4) 분산 트랜잭션을 다룰 수 있다. 1. dbcp.jar 파일, pool.jar 파일 임포트 2. context.xml 태그 안에 리소스 정보 삽입 3. web.xml에 context... 2019. 6. 11.
[JSP] EL(Expression Language), JSTL(JSP Standard Tag Library) 정리 EL(Expression Language) *용도: 자바 빈의 프로퍼티나 맵, 리스트, 배열의 값을 보다 쉽게 꺼내게 해주는 기술. JSP에서는 주로 보관소에 들어 있는 값을 꺼낼 때 사용. EL을 사용하면 액션 태그를 사용하는 것보다 훨씬 더 간단히 보관소에 들어 있는 객체에 접근하여 값을 꺼내거나 메서드를 호출할 수 있다. *검색범위 지정: pageScope → JspContext requestScope → ServletRequest sessionScope → HttpSession applicationScope → ServletContext **EL이 공유공간에 접근할 때 영역(Scope)을 지정하지 않으면 pageScope-> requestScope -> sessionScope -> applicat.. 2019. 6. 10.