Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

PicketLinkというセキュリティやアイデンティティ管理のライブラリを触ってみる

今まで幾つかJava EE 6ベースの開発をしてきて、そのフィードバックとして色々と改善していきたい所がたくさんあるのですが、その1つにユーザ情報の管理やセキュリティ部分があります。

Java EEだと通常はレルムを使うのが標準的、という話は聞きますが、Apache Shiroのようなフレームワークがあったり、SpringにはSpring Securityみたいな便利ツールがあるとも聞きます。

で、「Java EEやってる皆どうしてるの?」って感じの質問がFacebookのPrimeFaces Groupで流れてて、最近だと「PicketLink」がいい、みたいな情報があったので調べてみました。

http://picketlink.org/
f:id:kikutaro777:20140528224136j:plain

JBossで開発しているセキュリティとアイデンティティ管理のためのアプリケーションらしいです。

サイトトップをみると、結構色々機能がありそうです。SNS系のログインやSAML、OAuth2などのキーワードがみえます。

そしてドキュメントがすごく豊富(^^;
http://docs.jboss.org/picketlink/2/latest/reference/html/

とりあえず「5分で始める」という文字がみえたので、そこやってみました。
f:id:kikutaro777:20140528230112j:plain

JBossなので、JBoss APやWildFlyベースな情報が多いですが、私は以下環境で試しました。

Windows 8
JDK 8
Java EE 7
GlassFish Server 4.0.1b05

Mavenのpom.xmlで

<dependency>
    <groupId>org.picketlink</groupId>
    <artifactId>picketlink-api</artifactId>
    <scope>compile</scope>
    <version>2.6.0.CR2</version>
</dependency>
<dependency>
    <groupId>org.picketlink</groupId>
    <artifactId>picketlink-impl</artifactId>
    <scope>runtime</scope>
    <version>2.6.0.CR2</version>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.1.4.GA</version>
</dependency>

と定義します。最初ハマったのですが、loggingの設定がないと上手く動かせませんでした(^^;

で、コードは上記Get Startedにあるものとほぼ同じです。

CDI管理対象Beanで

package com.hogehoge.picketlinksample;

import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.PartitionManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.Grant;
import org.picketlink.idm.model.basic.Group;
import org.picketlink.idm.model.basic.GroupMembership;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.User;

@Named
@ViewScoped
public class PicketLinkBean {
    
    @Inject
    private PartitionManager partitionMng;

    @Inject
    private IdentityManager identityMng;
    
    @Inject
    private RelationshipManager relationshipMng;
    
    @PostConstruct
    public void init(){
        //ユーザ情報作成
        User user = new User("makimaki");
        user.setFirstName("maki");
        user.setLastName("horikita");
        //アイデンティティ管理へ登録
        identityMng.add(user);
        
        //グループ作成
        Group group = new Group("sweetpower");
        identityMng.add(group);
        
        //ロール作成
        Role role = new Role("actress");
        identityMng.add(role);
        
        //ユーザとグループの関連
        relationshipMng.add(new GroupMembership(user, group));
        
        //ユーザとロールの関連
        relationshipMng.add(new Grant(user, role));
    }
    
    public String getUserName(){
        User user = BasicModel.getUser(identityMng, "makimaki");
        return user.getLastName() + user.getFirstName();
    }
}

ユーザ情報管理(IdentityManager)、関連性の管理(RelationshipManager)はわりと直感的で使いやすそうな気もします。

とりあえず上記管理対象Beanに対となる画面を定義して

<h:body>
    <h:outputLabel id="lblUser" value="#{picketLinkBean.userName}" />
</h:body>

実行

f:id:kikutaro777:20140528233245j:plain

とりあえず、ちょっとしたサンプルレベルが動かせたので、色々触っていきながら、機能をまとめていきたいと思います。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村