logindoas.java

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

JAVA
54
字号
import com.sun.security.auth.callback.TextCallbackHandler;
import javax.security.auth.*;
import javax.security.auth.login.*;
import java.security.*;
import java.util.*;
// import  sample.principal.SamplePrincipal;
public class LoginDoAs{
   public static void main(String[] args) {
       LoginContext c=null;
        //登录
       TextCallbackHandler handler=new TextCallbackHandler( );
       try {
	      c = new LoginContext("simp",handler);
 	      c.login();
       } 
	catch (LoginException le) {
             System.out.println("Authentication failed!");
             System.exit(1);
       } 
       Subject subj = c.getSubject();
       Myaction myact=new Myaction( );
	try {
		Subject.doAs(subj, myact);
	} catch (AccessControlException e) {
		System.out.println(e);
	} 

     }
}



class Myaction implements PrivilegedAction {
	public Object run() {
		AccessControlContext context = AccessController.getContext();
		Subject subject = Subject.getSubject(context );
		if (subject == null ) {
			throw new AccessControlException("Denied");
		}
		Set principals = subject.getPrincipals();
		Iterator iterator = principals.iterator();
		String name="CN=Webmaster,OU=NC,O=Shanghai University,L=ZB,ST=Shanghai,C=CN";
//		String name="testUser";
		while (iterator.hasNext()) {
			Principal principal = (Principal)iterator.next();
			if (principal.getName().equals( name )) {
				System.out.println("Now run code permitted by "+name );
				return new Integer(0);
			}
		}
		throw new AccessControlException("Denied");
	}
}

⌨️ 快捷键说明

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