simpleloginmodule.java

来自「本书以大量精简的实例介绍了Java安全性编程方面的概念和技术」· Java 代码 · 共 79 行

JAVA
79
字号
import java.io.*;
import java.util.*;
import java.security.Principal;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.spi.LoginModule;

public class SimpleLoginModule implements
                                     LoginModule {
  private static final int NOT_AUTHENTICATED = 0;
  private static final int AUTHENTICATED = 1;
  private static final int
                        AUTHENTICATE_COMMITTED = 2;

  private int state;
  private SimplePrincipal sp;
  private Subject sub;

  public boolean abort() {
    if ((sub != null) && (sp  != null)) {
      Set prins = sub.getPrincipals();
      if (prins.contains(sp)) {
        prins.remove(sp);
      }
    }
    sub = null;
    sp = null;
    state = NOT_AUTHENTICATED;
    return true;
  }
  
  public boolean commit() {
    if (state < AUTHENTICATED) {
      return false;
    }
    if (sub == null) {
      return false;
    }
    Set prins = sub.getPrincipals();
    if (!prins.contains(sp)) {
      prins.add(sp);
    }
    state = AUTHENTICATE_COMMITTED;
    return true;
  }
  
  public void initialize(Subject s, CallbackHandler ch,  Map shared, Map options) {
    state = NOT_AUTHENTICATED;
    sp = null;
    sub = s;
  }
  
  public boolean login() {
    BufferedReader br = new BufferedReader(
                  new InputStreamReader(System.in));
    System.err.println("What can Jack Burton see? ");
    try {
      String resp = br.readLine();
      if (!resp.equalsIgnoreCase("things  no one else can see")) {
        return false;
      }
    }
    catch (IOException ioe) {
      return false;
    }
    sp = new SimplePrincipal("Jack");
    state = AUTHENTICATED;
    return true;
  }
  
  public boolean logout() {
    state = NOT_AUTHENTICATED;
    sp = null;
    sub = null;
    return true;
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?