본문 바로가기

카테고리 없음

2.10. 스프링루 시작하기 - Securing the Application

2. 스프링 루 시작하기 : 튜토리얼
2.1. 뭘 배울수있나? 
2.2. 또다른 튜토리얼: 웨딩 초대장 어플리케이션
2.3. 튜토리얼 어플리케이션 상세설명
2.4. 1단계: 일반적인 프로젝 시작하기
2.5. 2단계: 엔티티와 필드 생성하기
http://gokgo.tistory.com/script/powerEditor/pages/
2.6. 3단계: 통합테스트
2.7. 4단계: IDE 사용하기
2.8. 5단계: 웹티어 만들기
2.9. 6단계: 웹서버 로딩하기
2.10. 어플리케이션에 보안적용하기
2.11. 웹UI의 Look & Feel 커스터마이징하기
2.12. 셀레니움 테스트 
2.13. 백업과 디플로이하기
2.14. 이제 뭐하지



2.10. 어플리케이션에 보안적용하기

피자가게 주인과 토론끝에 우리는 웹의 전면부의 특정화면의 접근을 제어할 필요가 생겼어. 어플리케이션의 특정 화면에의 접근을 보호하려면 security setup 명령어를 통해 Spring Security 애드온을 설치하면 가능하지:

~.web roo> security setup
Managed ROOT/pom.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/applicationContext-security.xml
Created SRC_MAIN_WEBAPP/WEB-INF/views/login.jspx
Managed SRC_MAIN_WEBAPP/WEB-INF/views/views.xml
Managed SRC_MAIN_WEBAPP/WEB-INF/web.xml
Managed SRC_MAIN_WEBAPP/WEB-INF/spring/webmvc-config.xml

루쉘은 너가 웹 레이어를 생성할때까지 security setup 명령어를 숨겨둘거라는걸 알아둬. 위를 보면 security setup 명령어는 pom.xml 파일을 손봐.

이것은 추가적인 의존성이 프로젝에 필요하다는걸 의미해. STS workspace에 이 의존성을 추가하려면 넌 perform eclipse 명령어를 다시 수행하고로젝을 refresh해야해.
(만일 너가 STS나 m2eclipse를 쓰고있다면, 너의 프로젝에 Spring Security 추가하는것은 자동으로 찾아서 하기때문에 "perform eclipse" 명령어를 건너띄어야해)

피자가게 어플리케이션에서 ToppingBase,그리고 Pizza 소스들을 보호하려려 
src/main/resources/META-INF/spring 폴더에 있는 
applicationContext-security.xml 파일을 열고 다음과 같이 고치면 되:

<!-- HTTP security configurations -->
<http auto-config="true" use-expressions="true">
   <form-login login-processing-url="/static/j_spring_security_check" 
login-page="/login"
authentication-failure-url="/login?login_error=t"/> <logout logout-url="/static/j_spring_security_logout"/> <!-- Configure these elements to secure URIs in your application --> <intercept-url pattern="/pizzas/**" access="hasRole('ROLE_ADMIN')"/> <intercept-url pattern="/toppings/**" access="hasRole('ROLE_ADMIN')"/> <intercept-url pattern="/bases/**" access="hasRole('ROLE_ADMIN')"/> <intercept-url pattern="/resources/**" access="permitAll" /> <intercept-url pattern="/static/**" access="permitAll" /> <intercept-url pattern="/**" access="permitAll" /> </http>

다음 단계로, Spring Security JSP 태그 라이브러리를 써서 menu.jspx 파일에서 연관된 메뉴 아이템의 접근을 제한해야해:

<div xmlns:jsp="..." 
xmlns:sec="http://www.springframework.org/security/tags"
id="menu" version="2.0"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <jsp:output omit-xml-declaration="yes"/> <menu:menu id="_menu" z="nZaf43BjUg1iM0v70HJVEsXDopc="> <sec:authorize ifAllGranted="ROLE_ADMIN"> <menu:category id="c_topping" z="Xm13w68rCIyzL6WIzqBtcpfiNQU="> <menu:item id="i_topping_new" .../> <menu:item id="i_topping_list" .../> </menu:category> <menu:category id="c_base" z="yTpmmNMm/hWoy3yf+aPcdUX2At8="> <menu:item id="i_base_new" .../> <menu:item id="i_base_list" .../> </menu:category> <menu:category id="c_pizza" z="mXqKC1ELexS039/pkkCrZVcSry0="> <menu:item id="i_pizza_new" .../> <menu:item id="i_pizza_list" .../> </menu:category> </sec:authorize> <menu:category id="c_pizzaorder" z="gBYiBODEJrzQe3q+el5ktXISc4U="> <menu:item id="i_pizzaorder_new" .../> <menu:item id="i_pizzaorder_list" .../> </menu:category> </menu:menu> </div>

이렇게 하면 피자 주문페이지 (View) 는 누구나 접근해서 볼수있게 남겨둬. 확실한건 피자주문 페이지에 삭제와 업데이트 기능은 바람직하지않다는거야.

가장 쉽게 이걸 하려면 PizzaOrderController.java 소스에 @RooWebScaffold 애노테이션을 적용하는거지:

@RooWebScaffold(path = "pizzaorder", 
                formBackingObject = PizzaOrder.class, 
                delete=false, 
                update=false)

이걸로 루쉘은 PizzaOrderController에서 delete와 update 메소드를 지울거야. 또한 관련된 페이지들(View artifacts)에도 적용해주지.

이 단계가 끝나면서, 너는 어플리케이션을 재시작하면 'admin' 사용자가 http://localhost:8080/pizzashop/login 인증을 통해 접근할수있어.