在本文中我們會在網站中新增兩個頁面,這兩個頁面均是內部頁面(意即非bookmarkable),只是其中之一使用meta data進行授權,而另一頁則使用annotation授權。
所以,在首頁(HomePage.html)的地方,我們新增了兩個超連結,其中一個是AdminInternalPage.html(使用meta data授權);另一個是AdminInternalAnnotationPage.html(使用annotation授權):
<div> <a href="#" wicket:id="adminBookmarkableLink"> 前往bookmarkable AdminPage.html(使用metadata方式授權) </a> <br /> <a href="#" wicket:id="adminInternalLink"> 前往內部頁面AdminInternalPage.html(使用metadata方式授權) </a> <br /> </div> <br /> <div> <a href="#" wicket:id="adminAnnotBookmarkableLink"> 前往bookmarkable AdminAnnotationPage.html(使用annotation方式授權) </a> <br /> <a href="#" wicket:id="adminAnnotInternalLink"> 前往內部頁面AdminInternalAnnotationPage.html(使用annotation方式授權) </a> </div>
接下來我們要修改HomePage.java的程式碼,以符合wicket的使用規則。
//連到使用meta data授權方式的AdminPagelhtml add(new BookmarkablePageLink<Void>("adminBookmarkableLink", AdminPage.class)); //連到使用meta data授權方式的AdminInternalPage.html add(new Link("adminInternalLink") { @Override public void onClick() { setResponsePage(new AdminInternalPage("foo")); } }); //連到使用annotation授權方式的AdminAnnotationPagelhtml add(new BookmarkablePageLink<Void>("adminAnnotBookmarkableLink", AdminAnnotationPage.class)); //連到使用annotation授權方式的AdminInternalAnnotationPagelhtml add(new Link("adminAnnotInternalLink") { @Override public void onClick() { setResponsePage(new AdminInternalAnnotationPage("bar")); } });
下一步,我們要建立AdminInternalPage.html及AdminInternalPage.java。
<wicket:extend> 歡迎光臨,你目前使用ADMIN角色登入,因此能看到此頁面!<br /> 本頁面使用meta data進行授權。 </wicket:extend>
//AdminInternalPage.java package com.myapp.wicket; public final class AdminInternalPage extends BasePage { public AdminInternalPage(String dummy) { } }
再來則是要建立AdminInternalAnnotationPage.html及AdminInternalAnnotationPage.java。
<wicket:extend> 歡迎光臨,你目前使用ADMIN角色登入,因此能看到此頁面!<br /> 本頁面使用meta data進行授權。 </wicket:extend>
#AdminInternalAnnotationPage.java package com.myapp.wicket; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; @AuthorizeInstantiation("ADMIN") public final class AdminInternalAnnotationPage extends BasePage { public AdminInternalAnnotationPage(String dummy) { } }
最後則是在Appilcation.java,修改它的init()方法。
@Override protected void init() { super.init(); this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); //註冊授權策略 //使用角色授權策略 getSecuritySettings().setAuthorizationStrategy( new RoleAuthorizationStrategy(new UserRolesAuthorizer())); //使用wicket metadata(html markup)的方式進行授權管理 MetaDataRoleAuthorizationStrategy.authorize(AdminPage.class, "ADMIN"); MetaDataRoleAuthorizationStrategy.authorize(AdminInternalPage.class, "ADMIN"); }
No comments:
Post a Comment