在本文中我們會在網站中新增兩個頁面,這兩個頁面均是內部頁面(意即非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