Apache Shiroでユーザ認証を行う
Shiroはこのページよりダウンロードできます。全機能を含むバイナリは
今回はshiro-all
Shiroを使った認証の起点となるのはSecurityUtilsクラスです。このクラスのstaticメソッドによって,
今回は,
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory("shiro.ini");
org.apache.shiro.mgt.SecurityManager manager = factory.getInstance();
SecurityManagerが作成できたら,
SecurityUtils.setSecurityManager(manager);
サブジェクトはSubjectクラスとして実装されています。これを取得するには,
Subject user = SecurityUtils.getSubject();
ユーザ認証はSubjectを介して行うことができるのですが,
UsernamePasswordToken token =
new UsernamePasswordToken("gihyo", "gihyopass");
このTokenオブジェクトをSubjectのlogin()メソッドに渡して実行することでログイン認証が行われます。次のプログラムは,
public class FirstShiroSample {
public static void main(String[] args) {
// セキュリティマネージャの設定
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
org.apache.shiro.mgt.SecurityManager manager = factory.getInstance();
SecurityUtils.setSecurityManager(manager);
// Subjectの取得
Subject user = SecurityUtils.getSubject();
if (!user.isAuthenticated()) {
try {
// Tokenの作成
UsernamePasswordToken token = new UsernamePasswordToken("gihyo", "gihyopass");
// ログイン
user.login(token);
System.out.println("Login successful.");
} catch (AuthenticationException ex) {
System.out.println("Authentication failed.\n" + ex);
}
} else {
System.out.println("This user is authenticated.");
}
}
}
login()メソッドは認証に失敗するとAuthenticationException
.iniファイルの記述方法ですが,
[users]
gihyo = gihyopass
.iniファイルが用意できたら,
Authentication failed.
org.apache.shiro.authc.IncorrectCredentialsException:
The credentials provided for account
[org.apache.shiro.authc.UsernamePasswordToken - gihyo, rememberMe=false]
did not match the expected credentials.
もし
[main]
securityManager.sessionManager.sessionValidationSchedulerEnabled = false
次回は,