package connector; import javax.resource.spi.work.SecurityContext; import javax.security.auth.Subject; import javax.security.auth.message.callback.GroupPrincipalCallback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.Callback; import javax.security.auth.callback.UnsupportedCallbackException; import java.util.List; import java.util.ArrayList; import java.io.IOException; public class MyPlainSICWithGPC extends SecurityContext { private String groups[]; public MyPlainSICWithGPC(String[] groupNames){ this.groups = groupNames; } public void setupSecurityContext(CallbackHandler callbackHandler, Subject execSubject, Subject serviceSubject) { List<Callback> callbacks = new ArrayList<Callback>(); GroupPrincipalCallback gpc = new GroupPrincipalCallback(execSubject, groups); debug("setting group principal callback with group : " + groups); callbacks.add(gpc); addCallbackHandlers(callbacks, execSubject); Callback callbackArray[] = new Callback[callbacks.size()]; try{ callbackHandler.handle(callbacks.toArray(callbackArray)); }catch(UnsupportedCallbackException e){ debug("exception occured : " + e.getMessage()); e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); debug("exception occured : " + e.getMessage()); } } protected void addCallbackHandlers(List<Callback> callbacks, Subject execSubject) { //do nothing //hook to test Dupilcate Inflow Context behavior } public String toString(){ StringBuffer toString = new StringBuffer("{"); for(String group : groups){ toString.append(", groups : " + group); } toString.append("}"); return toString.toString(); } public void debug(String message){ System.out.println("JSR-322 [RA] [MyPlainSICWithGPC]: " + message); } }