Programming/JAVA2014. 4. 17. 21:01

1. pom.xml 

https://code.google.com/p/json-simple/

http://mvnrepository.com/artifact/net.minidev/json-smart

<dependency>
    <groupId>net.minidev</groupId>
    <artifactId>json-smart</artifactId>
    <version>2.0-RC3</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>


2. TEST 코드

import java.util.logging.Logger;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
//import net.minidev.json.JSONObject;
//import net.minidev.json.parser.JSONParser;
//import net.minidev.json.parser.ParseException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class test {
    Logger logger = Logger.getLogger("xxx");
    
    @RequestMapping("/test")
    public String tests() {
        
        //JSON => String
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("value1", 1111);
        jsonObj.put("value2", 2222);
        jsonObj.put("value3", 3333);
        logger.info( "Info : "+jsonObj.toString());
        
        //String => JSON 
        String jsonString = jsonObj.toString();
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(jsonString);
            jsonObj = (JSONObject) obj;
            logger.info( "Info : "+jsonObj.get("value1"));
            logger.info( "Info : "+jsonObj.get("value2"));
            logger.info( "Info : "+jsonObj.get("value3"));
        }catch ( ParseException e ){
            
        }
        
        return "test";
        
    }
}

==============결과=====================================

정보: Info : {"value3":3333,"value1":1111,"value2":2222}

정보: Info : 1111

정보: Info : 2222

정보: Info : 3333

=======================================================


3. String JSONObject 좀더 간단하게

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>



import java.util.logging.Logger;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class test {
    Logger logger = Logger.getLogger("xxx");
    
    @RequestMapping("/test")
    public String tests() {
        
        //String => JSON 
        String jsonString = "{\"value3\":3333,\"value1\":1111,\"value2\":2222}";
        JSONObject jsonObj = new JSONObject(jsonString);
        logger.info( "Info : "+jsonObj.get("value1"));
        logger.info( "Info : "+jsonObj.get("value2"));
        logger.info( "Info : "+jsonObj.get("value3"));
        return "test";
        
    }
}
Posted by 시니^^
Programming/JAVA2014. 4. 15. 15:53


아래처럼 #{}처 처리시 

DB에 SELECT id,user_id,state FROM UserInfo WHERE user_id = ?

PreparedStatement등의 처리이지만

01.<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
02.SELECT
03.id,
04.user_id,
05.state
06.FROM
07.UserInfo
08.WHERE
09.user_id = #{userId}
10.</select>


아래와 같이 ${}처리시에는 쿼리 구문에 대한 정의가됨

DB에 SELECT id,user_id,state FROM UserInfo WHERE user_id = user_id_value


01.<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
02.SELECT
03.id,
04.user_id,
05.state
06.FROM
07.UserInfo
08.WHERE
09.user_id = ${userId}
10.</select>


사용예시는 같이 동적인 column 및 table네임 생성시 사용


01.<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
02.SELECT
03.id,
04.user_id,
05.${state_column}
06.FROM
07.${table_name}
08.WHERE
09.user_id = #{userId}
10.</select>


Posted by 시니^^
Programming/JAVA2014. 4. 15. 15:18

1. 기존 parameterType="String" 파라미터 한개로 처리


UserInfoMapper.java

public interface UserInfoMapper {
    public UserInfo getUserInfo(String userId);
}


UserInfoMapper.xml

<select id="getUserInfo" parametertype="String" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
</select>

UserInfoService.java

String userId = "user_id_value";
userInfo = userInfoMapper.getUserInfo(userId);

※ 단일 parameterType 로 String userId값 넣음


2.  parameterType HashMap을 이용해서 여러개 넣기


UserInfoMapper.java

public interface UserInfoMapper {
    public UserInfo getUserInfo(HashMap<String, Object> map);
}

UserInfoMapper.xml

<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
AND
    state = #{state}
</select>

UserInfoService.java

HashMap<String, Object> map = new HashMap<String, Object>();
map.put("userId", "user_id_value");
map.put("state", "state_value");
userInfo = userInfoMapper.getUserInfo(map);


3. 2번과 비슷하지만 기존 userInfo 도메인 이용


UserInfoMapper.java

public interface UserInfoMapper {
    public UserInfo getUserInfo(HashMap<String, Object> map);
}

UserInfoMapper.xml

<select id="getUserInfo" parametertype="hashmap" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{user.userId}
AND
    state = #{user.state}
</select>

UserInfoService.java

UserInfo userInfo = new UserInfo();
userInfo.setUserId("user_id_value");
userInfo.setState("state_value");

HashMap<String, Object> map = new HashMap<String, Object>();
map.put("user", userInfo);

userInfo = userInfoMapper.getUserInfo(map);

4. Param 이용


UserInfoMapper.java
public interface UserInfoMapper {
    public UserInfo getUserInfo(@Param("userId") String userId, @Param("state") int state);
}
UserInfoMapper.xml
<select id="getUserInfo" resultmap="UserInfoResultMap">
SELECT
    id,
    user_id,
    state
FROM
    UserInfo
WHERE
    user_id = #{userId}
AND
    state = #{state}
</select>
UserInfoService.java
String userid ="user_id_value";
int state = 0;
userInfo = userInfoMapper.getUserInfo(String userid,int state);


Posted by 시니^^
Programming/Etc2014. 4. 11. 18:58

1. 알고리즘 특징과 설명(PHP기준)

DES 

전통적인 DES 알고리즘으로 키의 길이가 작아 비교적 보안에 취약하다. 상수 MCRYPT_DES를 사용한다. 

3DES/Triple DES 

DES의 변형 판이다. 유효 키 길이는 112비트이다. 상수 MCRYPT_3DES를 사용한다. 

CAST-128 

캐나다에서 설계된 알고리즘으로 128비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_CAST_128을 사용한다. 

CAST-256 

CAST-128의 확장 판으로 알고리즘으로 256비트 키와 128비트 블럭을 가진다. 상수 MCRYPT_CAST_256을 사용한다. 

XTEA 

128비트 키와 64비트 브럭을 가진다. 상수 MCRYPT_XTEA를 사용한다. 

3-WAY 

96비트 키와 블럭을 가진다. 상수 MCRYPT_THREEWAY를 사용한다. 

SKIPJACK 

미국 NSA에서 조건부 암호화 표준으로 설계한 알고리즘이지만 표준화되지 못했다. mcryp에서 추가 라이브러리를 이용해 접근할 수 있으며 80비트 키를 가진다. 상수 MCRYPT_SKIPJACK를 사용한다. 

BLOWFISH 

DES를 개선한 알고리즘으로 최대 448비트 길이의 키를 사용할 수 있다. 상수 MCRYPT_BLOWFISH를 사용한다. 

TWOFISH 

보안성이 높고 융통성이 있다. 128, 192, 256비트 키를 지원한다. 상수 MCRYPT_TWOFISH를 사용한다. 

LOKI97 

128, 192, 256비트 길이의 키를 이용한다. 상수 MCRYPT_LOKI97를 사용한다. 

RC2 

블럭 크기를 64비트이며 키는 8에서 1024비트이다. 오래된 알고리즘으로 16비트 컴퓨터에 적당하다. 상수 MCRYPT_RC2를 사용한다. 

ARCFOUR/RC4 

RC4는 RSADSL의 상표이므로 mcrypt는 RC4 알고리즘을 지원하지 않지만 ARCFOUR와 호환된다. 스트림 기반의 암호문과 최대 2048 비트 키를 지원한다. 상수 MCRYPT_ARCFOUR를 사용한다. 

RIJNDAEL 

가변적인 길의 블럭 암호문과 키를 가진다. 상수 MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, MCRYPT_RIJNDAEL_256을 사용한다. 

SERPENT 

128비트 블럭 암호문으로 DES보다 빠르다. 상수 MCRYPT_SERPENT를 사용한다. 

IDEA 

64비트 블럭과 128비트 키를 사용한다. 상수 MCRYPT_IDEA를 사용한다. 

ENIGMA/CRYPT 

하나의 원통을 가진 암호화 기계를 기반으로 해서 보안성이 낮다. 상수 MCRYPT_CRYPT를 사용한다. 

GOST 

256비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_GOST를 사용한다. 

SAFER 

64비트, 128비트 키를 지원하는 빠르고 안전한 알고리즘이다. 상수 MCRYPT_SAFER64, MCRYPT_SAFER128을 사용한다. 

SAFER+ 

SAFER 알고리즘의 확장판으로 128, 196, 256비트 키를 지원한다. 상수 MCRYPT_SAFERPLUS를 사용한다


2. PHP 모듈정보

MCRYPT_3DES

MCRYPT_ARCFOUR_IV (libmcrypt > 2.4.x only)

MCRYPT_ARCFOUR (libmcrypt > 2.4.x only)

MCRYPT_BLOWFISH

MCRYPT_CAST_128

MCRYPT_CAST_256

MCRYPT_CRYPT

MCRYPT_DES

MCRYPT_DES_COMPAT (libmcrypt 2.2.x only)

MCRYPT_ENIGMA (libmcrypt > 2.4.x only, alias for MCRYPT_CRYPT)

MCRYPT_GOST

MCRYPT_IDEA (non-free)

MCRYPT_LOKI97 (libmcrypt > 2.4.x only)

MCRYPT_MARS (libmcrypt > 2.4.x only, non-free)

MCRYPT_PANAMA (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_128 (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_192 (libmcrypt > 2.4.x only)

MCRYPT_RIJNDAEL_256 (libmcrypt > 2.4.x only)

MCRYPT_RC2

MCRYPT_RC4 (libmcrypt 2.2.x only)

MCRYPT_RC6 (libmcrypt > 2.4.x only)

MCRYPT_RC6_128 (libmcrypt 2.2.x only)

MCRYPT_RC6_192 (libmcrypt 2.2.x only)

MCRYPT_RC6_256 (libmcrypt 2.2.x only)

MCRYPT_SAFER64

MCRYPT_SAFER128

MCRYPT_SAFERPLUS (libmcrypt > 2.4.x only)

MCRYPT_SERPENT (libmcrypt > 2.4.x only)

MCRYPT_SERPENT_128 (libmcrypt 2.2.x only)

MCRYPT_SERPENT_192 (libmcrypt 2.2.x only)

MCRYPT_SERPENT_256 (libmcrypt 2.2.x only)

MCRYPT_SKIPJACK (libmcrypt > 2.4.x only)

MCRYPT_TEAN (libmcrypt 2.2.x only)

MCRYPT_THREEWAY

MCRYPT_TRIPLEDES (libmcrypt > 2.4.x only)

MCRYPT_TWOFISH (for older mcrypt 2.x versions, or mcrypt > 2.4.x )

MCRYPT_TWOFISH128 (TWOFISHxxx are available in newer 2.x versions, but not in the 2.4.x versions)

MCRYPT_TWOFISH192

MCRYPT_TWOFISH256

MCRYPT_WAKE (libmcrypt > 2.4.x only)

MCRYPT_XTEA (libmcrypt > 2.4.x only) 


3. 성능(자바기준)

출처 : http://www.javamex.com/tutorials/cryptography/ciphers.shtml

자세한 내용은 위에 링크~!!( 영어다 ㅠㅠ )



Posted by 시니^^
Programming/JAVA2014. 4. 11. 16:59

1. Help => Install new software 

   또는 아래 Help => Eclipse Marketplace 에서 svn 검색 후 설치




2. 설치하고 나니까... 아래 SVN Connector.에러 나옴

---------------------------------------------------------------------------------------------------

Share project was failed.

Selected SVN connector library is not available or cannot be loaded.

If you selected native JavaHL connector, please check if binaries are available or install and select pure Java Subversion connector from the plug-in connectors update site.

If connectors already installed then you can change the selected one at: Window->Preferences->Team->SVN->SVN Connector.

----------------------------------------------------------------------------------------------------

※ Connection에 필요한 SVN Kit, JavaHL라이브러리 경우 EPL(Eclipse Public License) 적용될 때 법적 문제의 소지로 인해 별도로 설치할 수 있도록 배포되고 있다고함.



4. SVN Kit, JavaHL라이브러리 추가 Install 로 진행(Help => Install new software)

 => 추가 저장소 등록(Add Repository)

     http://community.polarion.com/projects/subversive/download/eclipse/3.0/update-site/



Posted by 시니^^
Programming/JAVA2014. 4. 9. 22:16

1. Microsoft에서Microsoft SQL Server JDBC 다운로드

1) SQL Server JDBC 드라이버 4.0 (SQL Server 2000 버전 지원 안한다고함) 

URL : http://www.microsoft.com/ko-kr/download/details.aspx?id=11774


2) SQL Server JDBC 드라이버 3.0

URL : http://www.microsoft.com/ko-kr/download/details.aspx?id=21599



2. sqljdbc.jar와 sqljdbc4.jar 차이점

http://msdn.microsoft.com/ko-kr/library/ms378422.aspx

 sqljdbc.jar

 라이브러리는 JDBC 3.0을 지원합니다. 

 라이브러리에는 JRE(Java Runtime Environment) 버전 5.0이 필요합니다.

 JRE 6.0에서 sqljdbc.jar을 사용하면 데이터베이스에 연결할 때 예외가 발생합니다.

 JDBC 드라이버는 JRE 1.4를 지원하지 않습니다.

 JDBC 드라이버를 사용하려면 JRE 1.4를 JRE 5.0 또는 JRE 6.0으로 업그레이드해야 합니다. 

 응용 프로그램이 JDK 5.0 이상과 호환되지 않아 다시 컴파일해야 하는 경우도 있습니다. 

 자세한 내용은 Sun Microsystems 웹 사이트의 설명서를 참조하십시오.

 sqljdbc4.jar

 라이브러리는 JDBC 4.0을 지원합니다. 

 이 라이브러리에는 sqljdbc.jar의 모든 기능과 함께 새로운 JDBC 4.0 메서드가 포함되어 있습니다.

 클래스 라이브러리를 사용하려면 JRE(Java Runtime Environment) 버전 6.0이 필요합니다.

 JRE 1.4 또는 5.0에서 sqljdbc4.jar을 사용하면 예외가 발생합니다.

 응용 프로그램을 JRE 6.0에서 실행해야 하는 경우에는 JDBC 4.0 기능을 사용하지 않더라도  sqljdbc4.jar을 사용하십시오.

JDBC 드라이버는 모든 주요 Sun 호환 Java 가상 컴퓨터에서 작동하고 지원되도록 설계되어 있지만 테스트는 Sun JRE 5.0 이상에서 수행됩니다


3. cmd에서 mvn install

C:\>mvn install:install-file -Dfile=sqljdbc.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar

C:\>mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar


4. pom.xml에 등록

        <!-- MSSQL -->

        <dependency>

            <groupId>com.microsoft.sqlserver</groupId>

            <artifactId>sqljdbc4</artifactId>

            <version>4.0</version>

        </dependency>

Posted by 시니^^
Programming/JAVA2014. 4. 9. 22:15

1. Maven 다운로드 사이트

http://maven.apache.org/download.cgi

Maven 3.2.1 (Binary zip) apache-maven-3.2.1-bin.zip 다운로드


2. 환경변수 설정

※ 시스템=> 고급=>환경변수 설정에 MAVEN_HOME/PATH 설정 또는 아래와 같이 cmd에서 SET실행


SET MAVEN_HOME=D:\apache-maven-3.2.1

SET PATH=%PATH%;%MAVEN_HOME%\bin


D:\>mvn --version

Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15T02:37:52+09:00)

Maven home: D:\apache-maven-3.2.1\bin\..

Java version: 1.8.0, vendor: Oracle Corporation

Java home: C:\Program Files\Java\jdk1.8.0\jre

Default locale: ko_KR, platform encoding: MS949


※ java_home not found in your environment 에러 발생시 JAVA HOME 추가
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_04
SET PATH=%PATH%;%JAVA_HOME%\bin

3. 해당 workspace 에 프로젝트가서 mvn 콘솔 실행하면됨
mvn clean
mvn compile war:inplace

4. 이클립스에 해당 버전 적용시 설정에서 아래와 같이 add 버튼 눌러서 추가하면됨



※ 아래 slf4j 실패시 적용
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.


Posted by 시니^^
Programming/PHP2013. 2. 22. 01:35

1. vi test.sh 에러발생할수있는 쉘스크립트작성

#!/bin/bash
ssssssssss

2. 실행시 에러가 발생함

-------------------------------------------

[root@test]$ /bin/bash test.sh

test.sh: line 3: ssssssssss: command not found
-------------------------------------------
3. PHP에서 exec 실행시 에러 감시 불가
$outmsg = exec('/bin/bash test.sh');
echo $outmsg;
exit;
4. 2>&1 이용한 표준 출력의 전달되는 곳으로 표준에러를 전달
--------------------------------------------
 
2>&1의 의미는 표준 출력의 전달되는 곳으로 표준에러를 전달하라는 의미
0, 1, 2는 각각 표준입력, 표준출력, 표준에러를 의미
--------------------------------------------
$outmsg = exec("/bin/bash test.sh 2>&1", $out, $err);
var_dump($out);
var_dump($err);
exit;
--결과물------------------------------------

array(2) {

  [0]=>  string(3) "111"

  [1]=>  string(46) "test.sh: line 3: ssssssssss: command not found"

}

int(127)

--------------------------------------------


5.  proc_open 사용

$sDesc = array(
        0 => array("pipe", "r"),  // stdin
        1 => array("pipe", "w"),  // stdout
        2 => array("pipe", "w")   //stderr
);
$oProcess = proc_open('/bin/bash test.sh', $sDesc, $aPipes, dirname(__FILE__), null);
if ( is_resource($oProcess) ) {
    $sStdout = stream_get_contents($aPipes[1]);
    $sStderr = stream_get_contents($aPipes[2]);
    fclose($aPipes[1]);
    fclose($aPipes[2]);
    echo 'stdout : '.$sStdout;
    echo 'stderr : '.$sStderr;
    proc_close($oProcess);
} else {
    exit('ERROR');
}

--결과물------------------------------------

stdout : 

stderr : /bin/bash: test.sh: No such file or directory 

--------------------------------------------


참고사이트

http://stackoverflow.com/questions/2320608/php-stderr-after-exec

http://kr.php.net/manual/en/function.proc-open.php 


Posted by 시니^^
Programming/PHP2013. 2. 22. 01:06

수정 작업을 해야되서 페이지 따로 구성해서 작업하는데..

기존 PHP소스에서 잘되던 exec명령어가 안된다......

-------------------------------------------

Warning: exec() has been disabled for security reasons....

-------------------------------------------


위의 에러의 경우 아래의 설정으로 기본적으로 해결된다....

-------------------------------------------

http://www.php.net/manual/kr/ini.sect.safe-mode.php

safe_mode boolean

PHP의 안전 모드 활성화 여부. PHP가 --enable-safe-mode로 컴파일 되면 기본값 On, 아니면 Off.

safe_mode_exec_dir string

PHP가 안전 모드를 사용중이라면, system()과 그 외의 시스템 프로그램을 실행하는 함수는 이 디렉토리에 있지 않으면 프로그램 시작이 거부된다. 윈도우를 포함한 모든 환경에서 디렉토리 구분은 /를 이용해야 합니다.


http://www.php.net/manual/kr/ini.core.php#ini.disable-functions

disable_function 설정

-------------------------------------------


하지만 php.ini아무리 봐도 답이 없음....

확인 결과 해당서버에 뭔가 깔려있다.......

-------------------------------------------

PHP 5.1.6 (cli) 

Copyright (c) 1997-2006 The PHP Group

Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies

    with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH

    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

-------------------------------------------

 


수호신(Suhosin) 설치되어있듬(수호신에 대해서 자세한 내용은 다음에 기회있을때 다시...)

우선 아래 실행해보면


if (extension_loaded('suhosin')) {
        $suhosin = @ini_get("suhosin.executor.func.blacklist");
        print_r($suhosin);
}
-------------------------------------------

[root@test]$ php test.php 

system,passthru,shell_exec,exec,show_source,popen,allow_url_fopen,proc_open

-------------------------------------------


시스템 명령어 막아 놓음......

그리고 vhost에서.....

특정 디렉토리만 해당 수호신에 해당 옵션을 별도록 설정 

-------------------------------------------

<Directory ?????/www/???>

php_admin_value suhosin.executor.func.blacklist system,passthru,shell_exec,show_source,popen,allow_url_fopen,popen,proc_open

</Directory>

-------------------------------------------


vhost php_admin_value에 exec가 빠져있기 때문에 허용 되었던 것임....

안되는 원인 찾는다고 계속 삽질했네 휴.....

ㅠ_________ㅠ;;



Posted by 시니^^