Wednesday, December 23, 2015

Spring Security 에 관하여




<http auto-config="true" use-expressions="true" create-session="never" entry-point-ref="unauthorizedEntryPoint" >

        <form-login
            username-parameter="user_id"
            password-parameter="password"
            login-processing-url="/signin_proc"
            authentication-success-handler-ref="signinSuccessHandler"
            authentication-failure-handler-ref="signinFailureHandler"
            default-target-url="/mypage"
            always-use-default-target="false"
            />

        <logout
        invalidate-session="true"
        logout-url="/signout" />
        <access-denied-handler ref="accessFailureHandler" />

        <custom-filter ref="authenticationTokenProcessingFilter" before="FORM_LOGIN_FILTER" />
    </http>


auto-config 란 ?
기본적
<http>
    <form-login />
    <http-basic />
    <logout />
</http>

 use-expressions="true" 이 있어야지 isAuthenticated() 이런걸 사용할 수 있음


 create-session="never" 이 있을때 세션을 만들지 않는다네


 entry-point-ref
 모든 URL에 대해 어찌되었든 권한에 맞지 않는 경우 이쪽으로 호출하게 된다.

 isAuthenticated()
 user 아이디와 패스워드 권한이 통과해야함


  <custom-filter ref="authenticationTokenProcessingFilter" before="FORM_LOGIN_FILTER" />

로그인 하기 전에 일로 감

Sunday, December 20, 2015

ThreadLocal

금일 ThreadLocal에 대해서 공부를 했다.

static 으로 선언을 하며 ThreadLocal<?>에 있는 객체를
쓰레드마다 set과 get을 할 수 있다.

신기하게도 자동으로 Thread 의 고유한값에 의해서 데이터들을 불러올수 있으며 ThreadLocal의 객체 끼리 자원공유가 안되며..

음..... 아무튼 신기하다.

ThreadLocal을 아직까지는 쓸 이유가 없다고 생각이 든다.

Thursday, December 17, 2015

API 문서 툴을 만들수 있는 프로젝트를 만들어보자(2) Parameter Check

node express 에서 파라미터를 체크를 안할수가 없는데 어찌 되었든간에

아래와 같은 방식으로 파라미터를 체크하고

parameterChecker.checkJson(req, res, ["project_name", "project_detail", "project_type", "project_open"]);



파라미터 체크는 아래와 같은 로직에 의해서 체크된다.
만약에 필수 파라미터에 파라미터가 들어가지 않게 되는 경우
파라미터 파라미터 error 라는 json 데이터를 리턴하게 되고

서버사이드에서는 에러를 발생하게 됨으로써 그 다음 처리들을 skip 해버리게된다.
이런 방식은 Spring3로 API만들때 쓰던 방식인데 노드 js에서도 적용했다.

var errorMessage   =  require('../constant/ErrorMessage');

var parameterCheck = {
  checkJson : function(req,res,  names){

      var canContinue = true;
      for(var i=0; i<names.length; i++){
          var val = req.query[names[i]];

          if(typeof val == 'undefined' || val == null || val == ''){
              res.json(errorMessage.getJsonErrorData('101'));
              throw new Error("parameterError", "custom");
          }
      }
  }
};

module.exports = parameterCheck;


Wednesday, December 16, 2015

API 문서 툴을 만들수 있는 프로젝트를 만들어보자

오늘 처음 고삐를 당겼다.
영감을 얻은곳은 매번 API문서를 만드는게 너무 귀찮고
문서공유도 잘 안되서 처음 생각했고
Yobi 처럼 openSource 화 되어있으면 많은 사람들이 사용할 수 있겠구나 생각이 들어서
시작하게 되었다.

먼저 프로젝트 조합은 아래와 같이 생각한다
reactjs + polymer + html + nodejs + mongoDB

자 그럼 시작

Thursday, December 10, 2015

Easy binding template using regExp in java

this is what easy way to just data binding with regExpression

my template

java

/**
 * Copyright 2009 by  Corp.,
 * All rights reserved.
 * 
 */
package hanwha.neo.modules.mobileapp.util;
import hanwha.neo.commons.IOUtils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author : ddavid
 * @version $Id: HtmlCovertToString.java,v 1.1.2.1 2015/12/11 15:01:53 Exp $
 */
public class HtmlCovertToString {
    
    
    public static String getConvertedString(String path, HashMap<StringString> map){
        return getChangedStr(getFileString(path), map);
    }
    public static String getFileString(String path) {
        FileInputStream fi = null;
        String str = "";
        try {
            fi = new FileInputStream(path);
            str = IOUtils.getString(fi);            
            System.out.println(str);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            org.apache.commons.io.IOUtils.closeQuietly(fi);
        }
        return str;
    }
    public static String getChangedStr(String str, HashMap<StringString> map) {
        StringBuffer output = new StringBuffer();
        Pattern pattern = Pattern.compile("\\{\\{[a-zA-Z0-0]+\\}\\}",
                Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(str);
        // using Matcher find(), group(), start() and end() methods
        int currentIndex = 0;
        while (matcher.find()) {
            String match = matcher.group();
            match = match.substring(2, match.length() - 2); // remove {{ }}
            output.append(str.substring(currentIndex, matcher.start()));
            if (map.containsKey(match)) {
                output.append(map.get(match));
            } else {
                output.append(matcher.group());
            }
            currentIndex = matcher.end();
            /*
             * System.out.println("Found the text " + matcher.group() +
             * " starting at " + matcher.start() + " index and ending at index "
             * + matcher.end());
             */
        }
        output.append(str.substring(currentIndex, str.length()));
        return output.toString();
    }
}
cs

and html file is

1
2
3
4
5
6
7
8
<html>
    <head></head>
<body>
    <p>    this is very good template  name {{name}} and age {{age}}
    </p>
</body>
</html>
cs

where to call is

1
2
3
4
5
6
HashMap<StringString> map = new HashMap<StringString>();
        
map.put("name""david");
map.put("age""15");
            
body = HtmlCovertToString.getConvertedString("testhtml", map);
cs

this is output
1
2
3
4
5
6
7
<html>
    <head></head>
<body>
    <p>    this is very good template  name david and age 15    
    </p>
</body>
</html>
cs