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