Wednesday, June 6, 2012

Apache Wicket Auth/Roles 簡介 -- Authentication (3)

本篇文章是更為進階的身份驗證範例,使用Annotation來進行頁面的權限設定,因為如果使用前二篇文章()中的範例來設定頁面的存取權限,維護各頁面權限的工作會變得很煩瑣。

-- 體驗範例程式 --



本範例程式和先前範例程式相比,程式碼變得更為簡潔,而且需要修改的部份不多,茲分述如下:


程式碼不須變動部份:

1.SignIn.html
2.SignIn.java
3.Session.java
4.SignOut.html
5.SignOut.java



程式碼有變動部份:

1.Application.java:此部份的程式碼有著最大的改變,因為要將權限的設定改為使用Annotation,所以不需如前面二個範例將授權策略實作(IAuthorizationStrategy)。

package com.myapp.wicket;           

import org.apache.wicket.Session;
import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;

public class Application extends AuthenticatedWebApplication {

    public Application() {
    }

    @Override
    public Class getHomePage() {
        return Home.class;
    }
    

    @Override
    protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
        return mysession.class;
    }

    @Override
    public Session newSession(Request request, Response response) {
        //回傳自訂的Session類別
        return new mysession(request);
    }

    @Override
    protected Class<? extends WebPage> getSignInPageClass() {
        //回傳登入頁面
        return SignIn.class;
    }
    
    @Override
    protected void init(){
        super.init();
        //設定字元集
        getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
        //原本以下必須實IAuthorizationStrategy,但是改用Annotation後就不需要了
    }
}

2.Home.html:此頁面變成所有使用者都可以進入,亦即沒有權限的限制,因此修改了部份的內容。

        <wicket:extend>
            <h2>Welcome!</h2>
            <p>
                此頁是共同頁面,每個人都可以進入
            </p>
            <p>
                <wicket:link><a href="AdminPage.html">管理者頁面</a></wicket:link><br/>
                <wicket:link><a href="SignOut.html">登出</a></wicket:link>
            </p>
        </wicket:extend>

3.Home.java:將建構子的內容全部清除。

4.AdminPage.html:此頁面是前面二個範例所沒有的,主要是受限的頁面,只有管理員才能進入。

        <wicket:extend xmlns:wicket="http://wicket.apache.org">
            <h2>Welcome ADMIN!</h2>
            <p>
                系統管理員才能看到此頁面
            </p>
            <p>
                <wicket:link><a href="Home.html">首頁</a></wicket:link><br/>
                <wicket:link><a href="SignOut.html">登出</a></wicket:link>
            </p> 
        </wicket:extend>

5.AdminPage.java:這裡的主要重點在於使用Annotation來描述此頁面的授權,也因此要匯入org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation。

package com.myapp.wicket;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.request.mapper.parameter.PageParameters;

/**
 *
 * @author Hsiao Shengche
 */

//加入Annotation,表示只有ADMIN才能看到
@AuthorizeInstantiation("ADMIN")
public final class AdminPage extends BasePage {
    public AdminPage() {
        super ();
    }

    public AdminPage(PageParameters params) {
        //TODO:  process page parameters
    }
}

No comments:

Post a Comment