블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
01-26 08:17
 

달력

« » 2025.1
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 31
 

최근에 올라온 글

최근에 달린 댓글


회사에 복귀한지 한 달이 되었습니다.

오늘도 새벽 5시에 퇴근을 하였습니다. 내일은 또 외근을 나가게 됩니다.

복귀하자마자 담당하게 된 업무도 엄청나게 쏟아지고... 쩝


하루에 5 시간의 수면시간만 보장해주면 좋은데 이틀에 5~6 시간 정도 밖에 못자니 점점 힘들어지네용...

뭐 저만 그런게 아니고 저희팀 모두가 그러니 문제는 문제입니다.



진짜 이러다가 인내심의 한계를 벗어나면 모든걸 버리고 도망치게 되겠죠...

Posted by 자수씨
, |

외부에서 받은 소스에 아래와 같이 불필요한 공백이 많다면...
한 페이지에 소스들이 안들어와서 개발에 힘이 듭니다.



500라인 정도라면 수작업으로 지울 수 있으나... 4000라인 정도라면 엄두조차 안나겠죠...

그래서 정규식을 조금 이용해 보았습니다.



정규식을 체크하시고 ^#R 로 검색조건을 걸고 대체어를 공백으로 하신 후 Replace All 버튼을 누르시면
불필요한 뉴라인은 사라지게 됩니다.

역시 강력한 규식이형!!!

Posted by 자수씨
, |

CasValidationFilter 를 Cas20ProxyReceivingTicketValidationFilter 로 테스트 했을 때, principal.getAttributes() 가 null 로 반환되어 어쩔 수 없이 Saml11TicketValidationFilter 를 사용하였습니다.

오늘 CAS Client 설정 메뉴얼을 작성하면서 Cas20ProxyReceivingTicketValidationFilter 로 설정하도록 한 것 때문에 같이 연동을 했던 분이 attributes 를 가지고 올 수 없었습니다.
당근 아저씨한테 물어보니 맨 처음 썼던 것 처럼 null 로 반환되는 문제 때문에 SAML로 하셨다고 하네요...

혹시 무언가 방법이 있을 것 같아 찾아보니 아래와 같은 방법이 있었습니다.

http://www.ja-sig.org/issues/browse/CAS-655

위의 방법은 CAS Server 의 /WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp 파일을 수정하는 것이었습니다.
<%@ page pageEncoding="UTF-8"%><%@ page session="false" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
 <cas:authenticationSuccess>
  <cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
  <cas:attributes>
   <c:forEach var="attr"
    items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"
    varStatus="loopStatus" begin="0"
    end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"
    step="1"><cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
   </c:forEach>
  </cas:attributes>

<c:if test="${not empty pgtIou}">
  <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
</c:if>
<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
  <cas:proxies>
<c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
   <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
</c:forEach>
  </cas:proxies>
</c:if>
 </cas:authenticationSuccess>
</cas:serviceResponse>
해당 파일을 열고 붉은 부분을 추가합니다. pageEncoding 은 해당 서버의 charset 에 맞게 설정합니다.



잘 나오는 것을 확인하였습니다. 일단 CAS 2.0 protocol 을 사용하는 것이 옵션도 많아서 일단은 이걸로 쭉~ 가볼 생각입니다.


Posted by 자수씨
, |
...
<Status><StatusCode Value="samlp:Success"></StatusCode></Status>
...

Response SAML에서는 저런식으로 Success가 나오는데...

javax.servlet.ServletException: org.jasig.cas.client.validation.TicketValidationException: No valid assertions from the SAML response found.
클라이언트에서 로그인할 때 저런 메시지가 나온다면...

CAS 서버나 클라이언트의 시간을 확인해보시면 됩니다.
서버 시간이 클라이언트 시간보다 말도 안되게 느리면 나오는 문제입니다.


지난 번에 당근아저씨가 겪언던 문제라 1시간만 삽질하고 해결!!!


tolerance 가 작게 잡혀 있으면 서버시간 보다 클라이언트 시간이 조금만 느려도... 문제가 발생하네요...

쩝;;;


Posted by 자수씨
, |
ExtJS 에서 EditorGridPanel을 사용하는데 꼭 두번을 클릭해야 Combo가 확장이 되는 것 이었습니다.



이런식으로 한번 클릭하면 포커싱이 되고, 두 번 클릭해야 되는 불편함 때문에 고민을 했는데...
동료 직원이 짜 놓은 소스를 보고 찾아 냈습니다.

clicksToEdit : Number

The number of clicks on a cell required to display the cell's editor (defaults to 2).

Setting this option to 'auto' means that mousedown on the selected cell starts editing that cell.


http://www.extjs.com/deploy/dev/docs/?class=Ext.grid.EditorGridPanel
EditorGridPanel 의 config 에 clicksToEdit 를 설정된 숫자 만큼 클릭을 해야 에디트가 가능하게 됩니다.




1로 설정할 경우 위와 같이 한방에 짜잔~~


Posted by 자수씨
, |

오늘 알게되었습니다. Windows 7 에서 IE 8 은 세션을 공유한다는 것을... (Win 7 촙오라서...)
분명 XP를 사용할 때, IE 8 에서는 세션을 공유하지 않는 것으로 생각 했는데, Windows 7 에서 새로 추가된 것인지는 모르겠지만 정말 대 재앙이었습니다.

일반적인 사용자들이야 편하겠지만... 개발자들은 한 PC에서 여러 계정을 띄워놓고 테스트 할 일이 많은데 어쩐지 세션이 꼬이는 것이였습니다. (이것 때문에 CAS가 재대로 안되는지 알고 4시간 삽질한 것 같습니다.)

이걸 알게된 것도 완전 우연이였습니다. 작업관리자에서 익스플로러 메모리가 180MB 정도 잡아먹길래, 기존에 메모리를 해제하는 방법인 열려있는 브라우저를 최소화를 했는데도 메모리를 그대로 잡고 있었습니다.
이상한 점을 느끼고 몇 가지 테스트를 해 보았습니다.

1. IE 8 브라우저를 한개 띄웠을 때의 작업관리자
아래 보이는 대로 두개의 iexplore.exe 프로세스가 생성되었습니다.



2. shift + 클릭으로 새창을 띄웠을 경우 (새 창은 웹 페이지 접속)
페이지에 접속하게 되어 메모리와 CPU를 잡아먹는 iexplore.exe 프로세스가 생성되었습니다.



3. 새로 띄운 창을 닫음
새로 띄운 창을 닫았음에도 불구하고 프로세스가 그대로 남아 있습니다.



4. 처음에 띄운 브라우저를 닫음
처음에 생성되었던 두 개의 iexplore.exe 프로세스가 사라졌습니다.



위의 내용을 종합해보면 메인에서 관리하는 프로세스가 하나 있고 브라우저 별로 한 개씩 프로세스가 생기며, 모든 창이 닫히기 전까지 프로세스가 살아있는 것을 볼 수 있었습니다. 세션을 계속 유지하기 위함으로 생각 됩니다만...

이와 같이 세션을 공유하는 것을 해결 하기 위해서는 아래와 같은 방식을 MS에서 제시하였습니다.
>> 브라우저에서 새 세션으로 열기


저 같은 경우는 작업표시줄에서 shift + 클릭으로 새창을 많이 띄우는데 위의 방법은 저와는 맞지 않아 아래의 방식을 사용하였습니다.

>> 실행 옵션에 -nomerge 를 설정



설정을 마치고서 몇 가지 테스틀 해 보았습니다.

5. -nomerge 옵션을 주고 새로운 브라우저를 띄움
역시나 두 개의 iexplore.exe 프로세스가 생성됩니다.



6. shift + 클릭으로 새 창 띄움
아까와는 다르게 프로세스가 2개 더 생성되었습니다.
세션 별로 메인 프로세스를 가지고 브라우저 별로 새로운 프로세스를 가지는 것을 추측할 수 있습니다.



물론 브라우저를 닫으면 관련된 프로세스가 죽게 됩니다.


이걸로 모르고 개발하는 웹 개발자들이 태반일텐데... 완전... 힘이 쭉쭉 빠지네요...
흙... CAS는 세션이랑 밀접한건데... 파폭이나 크롬에서는 잘 동작하는데 IE 8 에서 이상해서 진짜 고민 많이 했는데, 전혀 관계 없는 부분에서 찾아낸게... 참 다행입니다 ㅋㅋㅋㅋㅋ


이제부텀 재대로 쓰면 되겠죠~




Posted by 자수씨
, |

http://www.ja-sig.org/downloads/cas-clients/php/ 에서 최신버전 phpCAS 모듈을 내려받습니다.

CAS-[버전] 디렉토리 밑에 CAS, docs 디렉토리와 CAS.php 파일을 해당 php 프로젝트 루트에 붙여넣습니다.

include 페이지 수정

해당 로직을 include 페이지 상단에 삽입합니다. (서버 설정에 따라 붉은 볼드 부분은 변경될 수 있습니다.)

<?php

 

//

// phpCAS simple client

//

 

// import phpCAS lib

include_once('CAS.php');

 

phpCAS::setDebug();

 

// initialize phpCAS

phpCAS::client(CAS_VERSION_2_0,'sso-cas.univ-rennes1.fr',443,'');

 

// no SSL validation for the CAS server

phpCAS::setNoCasServerValidation();

 

// force CAS authentication

phpCAS::forceAuthentication();

 

// at this step, the user has been authenticated by the CAS server

// and the user's login name can be read with phpCAS::getUser().

 

// logout if desired

if (isset($_REQUEST['logout'])) {

        phpCAS::logout();

}

 

// for this test, simply print that the authentication was successfull

?>


Web Application
을 재 시작하여 CAS Login 페이지가 나오게 되면 정상입니다.

참고자료: http://www.ja-sig.org/wiki/display/CASC/phpCAS



Posted by 자수씨
, |

https://sourcesup.cru.fr/projects/cas4net 에서 casModule을 다운받습니다.

압축을 풀고 casModule.dll 파일을 어플리케이션의 bin 디렉토리에 casModule.dll 파일을 붙여 넣습니다.


CAS Server에 대한 URL을 설정합니다.

<appSettings>

        <add key="loginUrl" value="https://cas.server/login" />

        <add key="validateUrl" value="https://cas.server/serviceValidate" />

        <add key="logoutUrl" value="https://cas.server/logout" />

</appSettings>

‘CasModule’ httpModule  system.web 섹션 내부에 추가합니다.

<system.web>

        ...

        <httpModules>

               <add name="CasModule" type="Upmc.CasModule.CasModule, CasModule"/>

        </httpModules>

        ...

</system.web>

system.web 섹션에 인증과 권한을 설정합니다.

<system.web>

        ...

        <authentication mode="None">

        </authentication>

        <authorization>

               <allow users="*"/>

        </authorization>

        ...

</system.web>

Web Application을 재 시작하여 CAS Login 페이지가 나오게 되면 정상입니다.


참고자료: http://www.ja-sig.org/wiki/display/CASC/.Net+Http+module


Posted by 자수씨
, |

아래 사이트에서 최신버전 CAS Client를 다운받습니다.

http://www.ja-sig.org/downloads/cas-clients/cas-client-3.1.10-release.zip

다운 받은 라이브러리에서 /modules 디렉토리에 있는 jar 파일들을 /WEB-INF/lib 에 배포합니다.

web.xml 수정

Web application web.xml에 다음과 같은 servlet-filter를 추가합니다.

<!-- CAS:START - Java Client Filters -->

<filter>

   <filter-name>CasSingleSignOutFilter</filter-name>

   <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

</filter>

<filter>

  <filter-name>CasAuthenticationFilter</filter-name>

  <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

  <init-param>

    <param-name>casServerLoginUrl</param-name>

    <param-value>https://cas.institution.edu/cas/login</param-value>

  </init-param>

  <init-param>

    <param-name>serverName</param-name>

    <param-value>https://jira.institution.edu/jira/</param-value>

  </init-param>

</filter>

<filter>

    <filter-name>CasValidationFilter</filter-name>

    <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>

    <init-param>

        <param-name>casServerUrlPrefix</param-name>

        <param-value>https://cas.institution.edu/cas</param-value>

    </init-param>

    <init-param>

        <param-name>serverName</param-name>

        <param-value>https://jira.institution.edu/jira/</param-value>

    </init-param>

    <init-param>

        <param-name>redirectAfterValidation</param-name>

        <param-value>true</param-value>

    </init-param>

</filter>

<!--- CAS:END -->

     붉은 색 볼드 형식은 추후 설정에 따라 바뀔 수 있습니다.

servlet-filter mapping이 되는 filter-mapping을 추가합니다.

해당 Web application의 시작 페이지가 /login.jsp라면 아래와 같이 설정을 합니다.

<!-- CAS:START - Java Client Filter Mappings -->

<filter-mapping>

   <filter-name>CasSingleSignOutFilter</filter-name>

   <url-pattern>/*</url-pattern>

</filter-mapping>

<filter-mapping>

    <filter-name>CasAuthenticationFilter</filter-name>

    <url-pattern>/login.jsp</url-pattern>

</filter-mapping>

<filter-mapping>

    <filter-name>CasValidationFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

<!-- CAS:END -->

Single Sign Out listener를 추가합니다.

<!-- CAS:START - Java Client Single Sign Out Listener -->

<listener>

    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>

</listener>

<!-- CAS:END -->

Web Application을 재 시작하여 CAS Login 페이지가 나오게 되면 정상입니다.


참고자료: http://www.ja-sig.org/wiki/display/CASC/CAS+Client+for+Java+3.1

 

 

Posted by 자수씨
, |

지난 목요일... 생각지도 못한 밤샘 이후 아침에 집에 들려 짐을 챙겨 회사로 갔습니다.
겨울 산행이라 추울 것 같아 기모 타이즈도 사고...

당근책임 아저씨의 차를 타고 오대산 근처 켄싱턴 플로라 호텔에 도착...
킥-오프 행사를 보고 밥먹고 술먹고 이래저래 랄랄라~~

뭐 특별한 사항이 있다면, 우리팀 강책임님이 최우수사원이 되었다는 것과 우리 파트가 최우수파트가 되어 제주도여행권을 받았다는거???

겨울 산행은 역시나 추웠습니다. 게다가 팀내 아저씨들은 다들 집에 가시고 애들만 남은...

추운데다가 아직 미끄러운 비로봉 산행은 중간까지만 갔다가 다시 돌아왔습니다. ㅋㅋㅋ




정상처럼 보이게 찍으려고 했는데.. 큼큼;;;





완전 피곤합니다. 대박;;;


Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백