そのクラスはPageのサブクラスか
連休にちょっとWicketを触ってみた。練習で、認証ストラテジを実装したら嵌った。Pageのサブクラスで、LoginPage以外は認証が必要、というのが書けずに四苦八苦。結局親クラスをたどることにしたが、もう少しスマートに書けないものだろうか。
まぁ次は素直にMetaDataRoleAuthorizationStrategyを使おう。
(追記)id:t_yanoのアドバイスのおかげでようやくまともになった。
public class MyAutorizationStrategy implements IAuthorizationStrategy { public boolean isActionAuthorized(Component arg0, Action arg1) { return true; } public <T extends Component> boolean isInstantiationAuthorized( Class<T> component) { LoginSession loginSession = (LoginSession) Session.get(); String userName = loginSession.getUserName(); boolean isLoginPageOrNotPage = !Page.class.isAssignableFrom(component) || LoginPage.class.isAssignableFrom(component); if (isLoginPageOrNotPage || userName!=null) { return true; } else { return false; } } }
(修正前)
public class MyAutorizationStrategy implements IAuthorizationStrategy { public boolean isActionAuthorized(Component arg0, Action arg1) { return true; } public <T extends Component> boolean isInstantiationAuthorized( Class<T> component) { Class<? super T> superclass = component; boolean isNeedAuthPageComponent = false; //親クラスをたどる while (superclass != null && !LoginPage.class.equals(component)){ if (Page.class.equals(superclass)){ isNeedAuthPageComponent=true; } superclass = superclass.getSuperclass(); } LoginSession loginSession = (LoginSession) Session.get(); String userName = loginSession.getUserName(); if (userName != null) { return true; }else if (!isNeedAuthPageComponent){ return true; } else { return false; } } }
(修正前ここまで)
"Test Driven"でも薦めてあったが、Wicketはかなり素直にTDDができるように思う。
WicketTesterのインスタンスを作っておけば、コンポーネントは期待した通り振る舞ってくれる。
次なにか作る機会があれば、Wicketも対象にしてみたい。
public class TestHomePage { private WicketTester tester; @Before public void setUp() { tester = new WicketTester(new WicketApplication()); } @Test public void testRenderMyPage() { //start and render the test page tester.startPage(HomePage.class); //assert rendered page class tester.assertRenderedPage(HomePage.class); //assert rendered label component tester.assertLabel("message", "If you see this message wicket is properly configured and running"); } }
参考
Java のリフレクションでフィールドを取得する - 集中力なら売り切れたよ
http://d.hatena.ne.jp/r_ikeda/20090423/reflect
rio's blog Wicket の勉強 (4) wicket-auth-roles を使って認証/認可を実現する
http://rio1218.blog26.fc2.com/blog-entry-82.html
Apache Wicket - Home
http://wicket.apache.org/
オープンソース徹底活用WicketによるWebアプリケーション開発
- 作者: 矢野勉
- 出版社/メーカー: 秀和システム
- 発売日: 2009/03/12
- メディア: 単行本
- 購入: 23人 クリック: 238回
- この商品を含むブログ (46件) を見る
Test Driven: TDD and Acceptance TDD for Java Developers
- 作者: Lasse Koskela
- 出版社/メーカー: Manning Publications
- 発売日: 2007/10/22
- メディア: ペーパーバック
- 購入: 1人 クリック: 25回
- この商品を含むブログ (6件) を見る