일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AWS
- websocket
- PL/SQL
- jQuery
- express
- 도커
- CSS
- phaser
- autowired
- tiles.xml
- Cookie
- HTML
- 배포
- EC2
- model1
- 알고리즘
- 암호화
- Servlet
- JavaScript
- Spring
- JSP
- 웹게임
- RDS
- 웹소켓
- 비트코인
- node.js
- docker
- 블록체인
- SQL
- Ajax
- Today
- Total
목록Web/Spring framework (30)
記錄
[스프링 시큐리티] 스프링 시큐리티란 스프링에서 '보안 기능'을 위해 사용하는 프레임워크이다. 여기서 말하는 '보안 기능' 이란 '인증'과 '인가'로 나눌 수 있다. '인증'은 접속 자체에서부터 해당 접속을 허락해줘도 될지, 해당 접근을 인증하는 것이다. 쉽게 말해 비밀번호와 아이디를 제대로 쳤는지 확인하는 로그인 기능으로 볼 수 있다. '인가'는 애플리케이션 내 리소스에 대한 접근을 제어하는 것을 의미한다. 회원 내에도 등급이 나뉘어져 있어 이를 세세하게 분류하여 특정 페이지에 따라 특정한 사용자에게만 허락해 준다던가 하는 것을 예로 들 수 있다. [스프링 시큐리티 설정] 1. 라이브러리 설정(pom.xml) org.springframework.security spring-security-web 4.0..
드디어 첫 프로젝트의 결과물이 나왔다. 같은 팀원들이 정말 많은 고생을 했다. 특히 긴 프로젝트 기간동안 정말 첨예한 의견 대립이 많이 있었음에도 불구하고 사이가 더 좋아진 것 같아 더 보람차다. 토론을 하다가 해결이 나지 않는 경우 프로젝트 진행 속도를 위해서 깔끔하게 다수결로 의견을 결정하였다. 다수결에서 진 의견을 제시한 사람들의 경우(나도 때때로 여기에 포함) 깔끔하게 승복(?)하고 다수의 지지를 받은 의견을 구현하기 위해 최선을 다했다. 강사님의 가이드도 프로젝트의 완성도를 올려가는데에 많은 도움이 되었다. 프로젝트 설명프로젝트를 한 마디로 정리하자면 '개발자들을 위한 협업툴'이라고 할 수 있다. 개발 방법론에 대해 지식이 깊지 않더라도 주어진 템플릿만 활용한다면 개발 방법론을 적용해 프로그램을..
스프링 프레임워크에서 맵퍼의 쿼리 작성시 부등호를 사용해야 할 경우 아래와 같이 를 사용해서 부등호를 넣는다 그렇지 않으면 특수문자로 인식하여 RUN이 안됨 select tname, sday, eday, detail, ctime from task where pid = #{pid} and eday sysdate
멀티쓰래드 상황에서 시퀀스 값을 사용할 때 한 번 사용한 시퀀스 값을 그대로 다시 사용해야 할 경우 currval를 하게되면 값을 보장 받지 못한다. 그 사이에 누군가 nextval를 사용했을 수 있기 때문이다. 프로젝트를 하던 중 이것 때문에 좀 찾아보다가 selectKey 를 발견하게 되었다. selectKey는 채번을 미리 해서 그 값을 객체에 저장할 수 있는 기능이다 select seq_cmtid.nextval FROM DUAL insert into comments values(#{cmtid}, #{comments}, #{tid}, #{mid}, #{cmtkind}, sysdate) 위 코드에서는 selectKey가 가장 먼저 작동하면서 미리 시퀀스 값을 채번하여 keyProperty에 해당하는 ..
엑셀 파일을 추출하는 방법은 두 가지가 있는데 데이터 핸들링이 더 세세하게 들어갈 수 있는 poi 방식을 이용한 방법을 포스팅한다. 1. dependency 추가 org.apache.poipoi3.7 org.apache.poipoi-ooxml3.7HSSF(xls) : poi 라이브러리로 충분XSSF(xlsx) : poi-ooxml 라이브러리 필요 2. 내일 하자..작성중.
chat-ws.jsp(html도 무관)채팅 // 웹소켓으로 쓸 변수 선언 var wsocket; // 입장 버튼 클릭시 작동 함수 function connect() { // 웹소켓 생성 // 생성자에 관해서는 이전 포스팅 참고 // 여기서는 이 페이지로 대화 내용을 보내는 것이므로 소켓 경로가 이 페이지(여기)이다 wsocket = new WebSocket( "ws://localhost:8090/spring4-chap09-ws/chat-ws"); // 이렇듯 소켓을 생성하는 단계에서 // .onopen, onmessage, onclose에 해당하는 함수를 정의 wsocket.onopen = onOpen; wsocket.onmessage = onMessage; wsocket.onclose = onClose..
1. dependency 설정 org.springframework spring-websocket 4.0.4.RELEASE 2. Controller 오버라이드public class EchoHandler extends TextWebSocketHandler { // afterConnectionEstablished : 웹소켓이 연결되면 호출되는 함수 // 웹소켓이 연결 되는 것 = 프론트에서 웹소켓이 정확한 경로를 잡아 생성 되는 것 @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.printf("%s 연결 됨\n", session.getId()); } // 웹소켓 클라이언트..
1. pom.xml 에서 jackson dependency 선언(비동기로 json타입의 데이터를 가져올 것이기 때문에) com.fasterxml.jackson.core jackson-core 2.7.3 org.codehaus.jackson jackson-core-asl 1.9.13 com.fasterxml.jackson.core jackson-databind 2.7.3 2. DispatcherServlet 에 다음과 같이 선언(네임스페이스에 유의, xmlns:mvc 설정과 이를 이용한 맨 밑 두 줄) 3. 컨트롤러에서 아래와 같이 처리 (@ResponseBody, @RequestBody 설정)@RequestMapping(value="response2.kosta",method=RequestMethod.PO..
1. pom.xml 에서 jackson dependency 선언(비동기로 json타입의 데이터를 가져올 것이기 때문에) com.fasterxml.jackson.core jackson-core 2.7.3 org.codehaus.jackson jackson-core-asl 1.9.13 com.fasterxml.jackson.core jackson-databind 2.7.3 2. 나중에 Controller에서 @Autowired로 bean을 찾아 쓸 수 있도록 DispatcherServlet에org.springframework.web.servlet.view.json.MappingJackson2JsonView을 bean 설정 3. 컨트롤러에서 아래와 같이 처리(핵심: jsonview를 @Autowired 해주고..
pom.xml org.springframework.security spring-security-web 4.0.1.RELEASE org.springframework.security spring-security-config 4.0.1.RELEASE org.springframework.security spring-security-taglibs 4.0.1.RELEASE web.xml org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/applicationContext.xml /WEB-INF/security-context.xml springSecurityFilterChain org.springframework.we..
Tiles.xmlDOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> layout.jsp 직원 정보 관리 시스템 로그아웃 × 로그아웃 하시겠습니까? Cancel Logout
MasterController.java (Master는 내가 그냥 붙인거고 클래스명은 무관)// @Controller를 통해 DispatcherServlet이// 이를 controller로 인식하고 모든 처리를 여기로 요청한다@Controllerpublic class MasterController { // type으로 찾아 bean으로 생성 // root-context.xml에 이미 bean으로 설정은 마친 상태 @Autowired private SqlSession sqlsession; // 요청 주소를 mapping // 일단 .htm은 모두 이곳으로 요청되도록 설정된 상태이고 // 정확한 요청 주소를 보고 @RequestMapping 설정에 따라 // 알맞은 메소드로 요청이 들어간다 @RequestM..
addEmp.jsp 직원추가 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 돌아가기 EmpDto.java public class EmpDto { private int EMPNO; private String ENAME; private String JOB; private int MGR; private String HIREDATE; private int SAL; private int COMM; private int DEPTNO; // .... 아래는 getter, setter 자동 생성 // getter, setter 없으면 Mybatis 작동하지 않는다 // .. // .. // .. EmpDao.java(interface) public interface EmpDao { /..
pom.xml 4.0.0 kr.or bit PracticeSpring war 1.0.0-BUILD-SNAPSHOT 1.6 3.1.1.RELEASE 1.6.10 1.6.6 oracle ORACLE JDBC Repository http://maven.jahia.org/maven2 org.springframework spring-context ${org.springframework-version} commons-logging commons-logging org.springframework spring-webmvc ${org.springframework-version} org.aspectj aspectjrt ${org.aspectj-version} org.slf4j slf4j-api ${org.slf4j-ver..
Spring framework 스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다 Maven pom.xml(Project Object Model) 파일을 이용해서 프로젝트에 사용되는 jar파일(라이브러리)을 다운로드해서 사용하게 돕는 툴 Dependency 기능을 실행하기 위해서 다른 클래스(또는 타입)을 필요로 할때 이를 '의존' 한다고 한다. 예를 들어, A클래스가 기능하기 위해서 B클래스가 필요하다면 'A 클래스는 B 클래스에 의존한다'고 할 수 있다. 더 깊이 들어..
org.springframework.web.contextInterface WebApplicationContext public interface WebApplicationContextextends ApplicationContext Interface to provide configuration for a web application. This is read-only while the application is running, but may be reloaded if the implementation supports this.This interface adds a getServletContext() method to the generic ApplicationContext interface, and define..
web.xml SpringMVC_Basic01_Controller index.html spring org.springframework.web.servlet.DispatcherServlet spring *.htm Class DispatcherServletpublic class DispatcherServletextends FrameworkServlet Central dispatcher for HTTP request handlers/controllers, e.g. for web UI controllers or HTTP-based remote service exporters. Dispatches to registered handlers for processing a web request, providing co..
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 다 같은 그림인데 밑으로 내려올 수록 더 심화되고 자세한 흐름이다.기본적인 Spring MVC는 이 그림이 나타내는 flow가 전부라고 할 수 있다. ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ cf. Controller의 각 메소드에서 최종적으로 String값을 리턴하면서 클라이언트가 가도록 할 페이지를 넘길때 "redirect:"가 붙이는 이유? 내가 착각했던 부분은 Controller의 각 메소드가 return을 할 때 매핑된 .do 와 같은 처리 요청을 하면 다시 메소드로 갈 것이라고 생각했는데 잘못된 생각이었다. Controller에서 return을 하게 될 경우 view를 찾아 보내는 것을 피할 수 ..
bean에서 객체를 가져올 때 기본적으로 싱글톤 방식으로 객체를 가져온다. 즉, 아무리 여러번 객체를 가져와도 가져올 때마다 새로 생성하는 것이 아니라 하나의 동일한 객체를 가져오게 된다는 것이다. bean에서 객체를 가져올 때 기존처럼 싱글톤 방식으로 하나의 동일한 객체를 계속 가져오는 것이 아니라 getBean()으로 객체를 가져올 때마다(주입 받을 때마다) 객체를 새로 생성해서 새로운 객체를 가져오게 된다. 즉, getBean()을 통해 객체를 가져올 때(주입이 필요할 때)마다 새로운 객체가 필요하다면 scope="prototype"을 사용한다. 예제코드 public class Client implements InitializingBean , DisposableBean { public Client(..
예제코드 1 (기본) public class Client implements InitializingBean , DisposableBean { public Client() { System.out.println("Client Default"); } private String defaulthost; public Client(String defaulthost){ this.defaulthost = defaulthost; System.out.println("Client Overloading :" + this.defaulthost); } private String host; public String getHost() { return host; } public void setHost(String host) { this..
xml대신 Configcontext 을 "Spring 설정 파일"로 사용하는 방식이며 코드는 아래와 같다 /* Configcontext 을 [Spring 설정 파일]로 사용하겠다 (xml 파일 대체 하겠다) :객체 생성과 주입을 처리 하겠다 @Configuration (설정파일) @Bean (객체 생성) (함수 기반의 처리) xml 파일 이라면 Java 파일에서는 함수를 생성해서 객체 주소 리턴하는 형태 */ @Configuration //xml 생성public class Configcontext { @Bean public User user() { // return new User(); } @Bean public User2 user2() { // return new User2(); }} public cl..
public class Recorder { } public class MonitorViewer { private Recorder recorder; public Recorder getRecorder() { return recorder; } @Resource(name="yy") //id 값 또는 name 을 명시해서 특정 객체 주입 public void setRecorder(Recorder recorder) { this.recorder = recorder; System.out.println("setter 주입 성공"); }} public class Program { public static void main(String[] args) { /* JAVA 코드 방식 MonitorViewer viewer = ne..
public class Recorder { } public class MonitorViewer { private Recorder recorder; public Recorder getRecorder() { return recorder; } @Autowired @Qualifier("corder1") // public void setRecorder(Recorder recorder) { this.recorder = recorder; System.out.println("setter 주입 성공"); } @Autowired @Qualifier("corder2") // public void RecorderMethod(Recorder rec) { System.out.println("rec : " + rec); } } p..
.xml .javapublic class MonitorViewer { private Recorder recorder; public Recorder getRecorder() { return recorder; } // @Autowired가 선언됨으로써 // 해당 메소드에서 의존하고 있는 객체(구동을 위해 필요한 객체)를 // type으로 찾아서 이와 일치하는 객체를 bean 에서 찾아서 이곳에 injection하게 된다 @Autowired public void setRecorder(Recorder recorder) { this.recorder = recorder; }} public class Recorder { } public class Program { public static void main(Strin..
public class DataSourceFactory { private String jdbcDriver; private String jdbcUrl; private String username; private String password; public void setJdbcDriver(String jdbcDriver) { this.jdbcDriver = jdbcDriver; } public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this..
192.168.0.26 20000 package DI_10_Spring; import java.util.Properties; public class BookClient { private Properties config; public void setConfig(Properties config) { this.config = config; } //일반함수 (출력) public void connect() { String server = config.getProperty("server"); String timeout = config.getProperty("connectiontimeout"); System.out.println("server : " + server); System.out.println("timeou..
public class Program { public static void main(String[] args) { /* ProtocolHandler handler = new ProtocolHandler(); ArrayList arraylist = new ArrayList(); arraylist.add(new EncFilter()); arraylist.add(new HeaderFilter()); arraylist.add(new ZipFilter()); handler.setFilters(arraylist); */ ApplicationContext context = new GenericXmlApplicationContext("classpath:DI_07_Spring/DI_07.xml"); ProtocolHan..
public interface ProtocolHandler {} public class RestHandler implements ProtocolHandler {} public class RssHandler implements ProtocolHandler {} public class ProtocolHandlerFactory { //Map(key , value) private Map handlers; public void setHandlers(Map handlers) { this.handlers = handlers; System.out.println("setter 주입 성공 : " + this.handlers); }} public class Program { public static void main(Str..
public class JobExecute { public JobExecute(String first , int second) { System.out.println("String,int"); } public JobExecute(String first , long second) { System.out.println("String,long"); } public JobExecute(String first , String second) { System.out.println("String,String"); } private ArticleDao articledao; public ArticleDao getArticledao() { return articledao; } public void setArticledao(A..
ApplicationContext context = new GenericXmlApplicationContext("classpath:DI_05_Spring/DI_05.xml"); System.out.println("before : mybean객체");MyBean mybean = context.getBean("mybean",MyBean.class);System.out.println("after : mybean객체 : " + mybean); System.out.println("before : mybean2객체");MyBean mybean2 = context.getBean("mybean",MyBean.class);System.out.println("after : mybean2객체 : " + mybean2); /..