잊지 않겠습니다.

Filter가 적용이 되어 있는 경우, Filter에 적용되는 bean의 설정을 위해서 XmlWebApplicaionContext를 이용해서 Context객체들을 따로 로딩해줘야지 된다. 


순서는 다음과 같다. 


  1. ServletContext의 생성
  2. XmlWebApplicationContext의 생성 : 이때, Filter에 사용되는 Bean의 설정들은 모두 /WEB-INF/web.xml에 위치하고 있어야지 된다.
  3. XmlWebApplicationContext에 SevletContext를 주입하고, refresh를 시켜준다.
  4. 마지막으로, ServletContext에 속성을 추가한 후, MockFilterConfig, MockFilterChain을 이용해서 각각 Filter가 적용되는 Controller들을 테스트 한다.


    @Test

    public void get() throws Exception {

    ServletContext sc = new MockServletContext();

    XmlWebApplicationContext wctx = new XmlWebApplicationContext();    

    wctx.setServletContext(sc);            

        wctx.refresh();

        sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wctx);

        assertTrue(wctx.containsBean("sessionFactory"));

        

        

    MockHttpServletRequest request = new MockHttpServletRequest("GET","/rest/person/get/" + person.getId().toString());

    MockHttpServletResponse response = new MockHttpServletResponse();

        MockFilterConfig filterConfig = new MockFilterConfig(sc);

        MockFilterChain filterChain = new MockFilterChain();

        

        OpenSessionInViewFilter filter = new OpenSessionInViewFilter();

        filter.init(filterConfig);

        filter.doFilter(request, response, filterChain);

        

        

    Object handler = handlerMapping.getHandler(request).getHandler();

    ModelAndView modelAndView = handlerAdapter.handle(request, response, handler);    

    System.out.println(response.getContentAsString());    

    assertNull(modelAndView);

    }



Posted by Y2K
,

Eclipse 단축키 모음

Java 2012. 11. 24. 14:26

ctrl + s: 저장 및 컴파일
ctrl + i: 소스 깔끔 정리(인덴트 중심의 자동구문정리)
ctrl + space : 어휘의 자동완성(Content Assistance)

ctrl + E : 열린파일 옮겨다니기

ctrl + shift + E : 열린파일 띄우기

ctrl + M : 에디터화면 넓게
ctrl + 1 : Quick Fix(Rename에 주로 사용)
ctrl + shift + M : 캐럿이 위치한 대상에 필요한 특정클래스 import
ctrl + shift + O : 소스에 필요한 패키지의 자동 임포트
ctrl + /: 한줄 또는 선택영역 주석처리/제거
ctrl + Q : 마지막 편집위치로 가기
ctrl + L : 특정줄번호로 가기
ctrl + D : 한줄삭제
ctrl + H : Find 및 Replace
ctrl + K : 다음찾기(또는, 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.)
ctrl + shift + K : 이전찾기(또는, 찾고자 하는 문자열을 블럭으로 설정한 후 역으로 찾고자 하는 문자열을 찾아감.)
alt + shift + j : 설정해 둔 기본주석 달기
Ctrl + 객체클릭(혹은 F3) : 클래스나 메소드 혹은 멤버를 정의한 곳으로 이동(Open Declaration)


ctrl + shift + f : 소스 깔끔 정리
ctrl + 2 + R : Rename(리팩토링)
ctrl + shift + / : 선택영역 block comment 설정
ctrl + shift + \ : 선택영역 block comment 제거
alt + shift + up: Enclosing Element 선택(괄호의 열고 닫기 쌍 확인에 유용함)
ctrl + O : Outline창열기

ctrl + T : 상속구조 보기, 한번더 누르면 수퍼타입/서브타입 구조가 토글된다

Alt + ->, Alt + <-: 이후, 이전
해당프로젝트에서 alt + enter : Project 속성
sysout > Ctrl + Space: System.out.println();
try > Ctrl + Space : 기본 try-catch문 완성
for > Ctrl + Space : 기본 for문 완성
템플릿을 수정,추가: Preferences > java > editor > Templates

블럭 씌운상태에서 alt + shift + z : try/catch, do/while, if, for, runnable.... 등 블럭씌우기


ctrl + N : 새로운 파일 및 프로젝트 생성
ctrl + shift + s : 열려진 모든파일 저장 및 컴파일
alt + / : Word Completion
alt + shift + R : Rename
ctrl + shift + G : 특정 메써드나 필드를 참조하고 있는 곳을 찾는다.
ctrl + shift + B : 현재커서위치에 Break point설정/해제
ctrl + alt + R
ctrl + f11 : 실행
f11 : 디버깅 시작

f4 : 상속구조 클래스 보기(메소드, 멤버)
f5 : step into
f6 : step over
f8 : 디버깅 계속
ctrl + . : 다음오류부분으로 가기
ctrl + , : 이전오류부분으로 가기
f12 : 에디터로 커서이동
ALT + UP,DOWN : 현재 줄 위치 이동
Ctrl + j : 검색할 단어를 입력하면서 실시간으로 검색
Ctrl + Shift + j : 검색할 단어를 입력하면서 실시간으로 거꾸로 검색
F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.
ctrl + alt + up/down : 한줄 duplicate
alt + shift + 방향 : 선택
ctrl + shift + g : 객체(변수)가 참조 되는 곳을 찾아 준다

alt + shift + m : 코드 중복 해결(중복부분을 블록선택한 다음 단축키를 누르면 이부분을 별도의 메서드로 뽑아내줌)

ctrl + alt + h : 메서드 호출구조 보기

Posted by Y2K
,

Spring Security는 다음과 같은 순서로 동작하게 된다. 


  1. <security:http> 영역안의 인증정보를 얻게 된다. 
  2. 인증이되지 않은 경우, form-login login-page 항목의 url로 이동하게 된다. 
  3. 인증은 기본적으로 {wepapp}/j_spring_security_check에서 처리되게 되며, 페이지의 in/out값은 j_username, j_password가 된다. 
  4. j_spring_security_check는 등록된 authentication-manager의 authentication-provider에 username만을 넘긴다. 
  5. username을 이용, authentication-provider는 username, password, authentication-role을 설정해서 사용자 정보를 넘겨준다.
  6. Spring security에서 j_spring_security_check 에서 반환된 사용자 정보를 이용. password가 일치하는지 확인
  7. password가 일치되는 경우, authentication-success-handler-ref 에 정의된 Handler를 이용해서, page의 이동이나 json 응답을 준다.
  8. password가 일치되지 않는 경우, authentication-failure-handler-ref 에 정의된 Handler를 이용해서, page의 이동이나 json 응답을 준다.





하나 중요한 상황이. web.xml에 반드시 securityFilter와 ContextLoaderListener가 선언이 되어야지 된다. 

spring web mvc에서 각 controller들이 url을 등록하지만, 각 servlet의 applicationContext를 모두 포함하는 parent의 개념에서 spring security가 접근이 된다고 생각해야지 된다. 


구성한 web.xml 파일의 내용은 다음과 같다

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">


<display-name>board</display-name>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>


<servlet>

<servlet-name>spring</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>


<servlet-mapping>

<servlet-name>spring</servlet-name>

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

</servlet-mapping>


<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>


<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>


<filter-mapping>

<filter-name>encodingFilter</filter-name>

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

</filter-mapping>


<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>


<filter-mapping>

<filter-name>springSecurityFilterChain</filter-name>

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

</filter-mapping>

</web-app>



applicationContext.xml 파일의 내용은 다음과 같다.

<beans:beans xmlns="http://www.springframework.org/schema/security"

xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans 

                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

                    http://www.springframework.org/schema/security 

                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">



<beans:bean id="userService" class="com.xyzlast.services.UserServiceImpl" />

<beans:bean id="loginProcessHandler" class="com.xyzlast.handlers.LogInProcessHandler" />

<beans:bean id="encoder"

class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

<http use-expressions="true">

<intercept-url pattern="/account/index" access="permitAll" />

<intercept-url pattern="/**" access="isAuthenticated()" />

<intercept-url pattern="/welcome" access="isAuthenticated()" />

<form-login login-page="/account/index"

authentication-success-handler-ref="loginProcessHandler"

authentication-failure-handler-ref="loginProcessHandler" />

</http>


<authentication-manager>

<authentication-provider user-service-ref="userService">

<password-encoder ref="encoder" />     

</authentication-provider>

</authentication-manager>

</beans:beans>   



Posted by Y2K
,