package com.abc.demo.general.jaas; import javax.security.auth.Subject; import javax.security.auth.callback.*; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; import java.io.IOException; import java.security.Principal; import java.util.Map; public class MyLoginModule implements LoginModule { private Subject subject; private CallbackHandler callbackHandler; private Principal principal; @Override public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) { this.subject = subject; this.callbackHandler = callbackHandler; } / * 登录 */ @Override public boolean login() throws LoginException { try { NameCallback nameCallback = new NameCallback("user: "); PasswordCallback passwordCallback = new PasswordCallback("password: ", true); Callback[] callbacks = new Callback[] { nameCallback, passwordCallback}; callbackHandler.handle(callbacks); String username = nameCallback.getName(); String password = new String(passwordCallback.getPassword()); return login(username, password); } catch (IOException e) { e.printStackTrace(); } catch (UnsupportedCallbackException e) { e.printStackTrace(); } return false; } private boolean login(String username, String password) { System.out.println("username=" + username + ",password=" + password); //实际使用中应查数据库验证用户名密码 if ("abc".equals(username) && "".equals(password)) { principal = new MyPrincipal(username); subject.getPrincipals().add(principal); return true; } return false; } / * 登录成功后的操作 */ @Override public boolean commit() throws LoginException { return true; } //中断登录 @Override public boolean abort() throws LoginException { return logout(); } @Override public boolean logout() throws LoginException { if (subject != null && principal != null) { subject.getPrincipals().remove(principal); } return true; } }
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/12422.html