package com.pankaj.filters;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.portal.auth.ExplicitLoginFilter;
import com.ibm.portal.auth.ExplicitLoginFilterChain;
import com.ibm.portal.auth.FilterChainContext;
import com.ibm.portal.auth.exceptions.AuthenticationException;
import com.ibm.portal.auth.exceptions.AuthenticationFailedException;
import com.ibm.portal.auth.exceptions.PasswordInvalidException;
import com.ibm.portal.auth.exceptions.SystemLoginException;
import com.ibm.portal.auth.exceptions.UserIDInvalidException;
/**
* @author Pankaj Gupta
* build path dependency
* 1. C:/IBM/WebSphere/PortalServer/base/wp.auth.base/shared/app/wp.auth.base.jar
* 2. C:/IBM/WebSphere/PortalServer/base/wp.auth.cmd/shared/app/wp.auth.cmd.jar
*
*/
public class CustomExplicitLoginFilter implements ExplicitLoginFilter {
Context context = null;
PumaHome pumaHome = null;
public CustomExplicitLoginFilter() {
super();
}
public void init(SecurityFilterConfig filterConfig) throws SecurityFilterInitException {
System.out.println("Entering com.pankaj.filters.CustomExplicitLoginFilter.init(...)");
try{
context = new InitialContext();
pumaHome = (PumaHome) context.lookup(com.ibm.portal.um.PumaHome.JNDI_NAME);
} catch (Exception exp){
exp.printStackTrace();
}
System.out.println("Exiting com.pankaj.filters.CustomExplicitLoginFilter.init(...)");
}
public void login(HttpServletRequest req, HttpServletResponse resp, String userID, char password[],
FilterChainContext portalLoginContext, Subject subject, String realm, ExplicitLoginFilterChain chain)
throws LoginException, WSSecurityException, PasswordInvalidException, UserIDInvalidException,
AuthenticationFailedException, AuthenticationException, SystemLoginException,
com.ibm.portal.auth.exceptions.LoginException {
long startTime = System.currentTimeMillis();
long subTaskTime = startTime;
System.out.println("Entering CustomExplicitLoginFilter.login() ... Time Taken : " + (System.currentTimeMillis() - startTime) + " milli seconds");
chain.login(req, resp, userID, password, portalLoginContext, subject, realm);
System.out.println("User Authenticated ... Time Taken : " + (System.currentTimeMillis() - subTaskTime) + " milli seconds");
subTaskTime = System.currentTimeMillis();
List groupList = this.getUserGroups(req);
System.out.println("User groups retrieved ... Time Taken : " + (System.currentTimeMillis() - subTaskTime) + " milli seconds");
subTaskTime = System.currentTimeMillis();
if(this.isUserGroupAvailable(req, groupList, "wpsadmins") || this.isUserGroupAvailable(req, groupList, "wpadmins")){
System.out.println("Group Checked ... Time Taken : " + (System.currentTimeMillis() - subTaskTime) + " milli seconds");
subTaskTime = System.currentTimeMillis();
portalLoginContext.setRedirectURL("/wps/myportal/Administration");
System.out.println("URL created ... Time Taken : " + (System.currentTimeMillis() - subTaskTime) + " milli seconds");
subTaskTime = System.currentTimeMillis();
}
System.out.println("Exiting CustomExplicitLoginFilter.login(...) ... Time Took : "
+ (System.currentTimeMillis() - startTime) + " milli seconds");
}
public void destroy() {
// This is an empty implementation. No code required!!!
}
private List getUserGroups(HttpServletRequest request) {
List groupList = null;
try {
PumaProfile pumaProfile = pumaHome.getProfile(request);
com.ibm.portal.um.User user = pumaProfile.getCurrentUser();
PumaLocator pl = pumaHome.getLocator(request);
groupList = pl.findGroupsByPrincipal(user, false);
} catch(Exception exp){
exp.printStackTrace();
}
return groupList;
}
private boolean isUserGroupAvailable(HttpServletRequest request, List groupList, String userGroup) {
boolean groupFlag = false;
try {
List attribs = new ArrayList();
attribs.add("cn");
PumaProfile pumaProfile = pumaHome.getProfile(request);
for(Iterator group_itr = groupList.iterator();group_itr.hasNext();){
Group group = (Group) group_itr.next();
Map group_attribs = pumaProfile.getAttributes(group, attribs );
String group_cn = (String) group_attribs.get((Object)"cn");
System.out.println("group cn: " + group_cn);
if(group_cn.equals(userGroup)){
groupFlag = true;
break;
}
}
}
catch (Exception exp) {
exp.printStackTrace();
}
return groupFlag;
}
}
Warehouse for various notes, scripts, code samples, tips/tricks, etc. relating to different technologies like WebSphere Application Server (WAS), WebSphere Portal, Java, Java EE, DB2, etc.
Wednesday, June 8, 2011
Custom Authentication Filter
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment