1 28 package net.sf.jguard.example.struts.admin.actions; 29 30 31 import java.util.ArrayList ; 32 import java.util.Collection ; 33 import java.util.HashSet ; 34 import java.util.Iterator ; 35 import java.util.List ; 36 import java.util.Set ; 37 38 import javax.security.auth.Subject ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 42 import net.sf.jguard.core.authentication.credentials.JGuardCredential; 43 import net.sf.jguard.core.principals.RolePrincipal; 44 import net.sf.jguard.example.struts.actions.BaseAction; 45 import net.sf.jguard.ext.SecurityConstants; 46 import net.sf.jguard.ext.authentication.AuthenticationException; 47 import net.sf.jguard.ext.authentication.manager.AuthenticationManager; 48 import net.sf.jguard.ext.registration.RegistrationException; 49 import net.sf.jguard.ext.registration.SubjectTemplate; 50 import net.sf.jguard.jee.authentication.http.HttpAuthenticationUtils; 51 import net.sf.jguard.jee.authentication.http.HttpConstants; 52 53 import org.apache.commons.lang.StringUtils; 54 import org.apache.log4j.Logger; 55 import org.apache.struts.action.ActionForm; 56 import org.apache.struts.action.ActionForward; 57 import org.apache.struts.action.ActionMapping; 58 import org.apache.struts.action.DynaActionForm; 59 60 61 64 public class UserDispatchAction extends BaseAction{ 65 66 private static Logger logger = Logger.getLogger(UserDispatchAction.class); 67 68 76 public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 77 DynaActionForm dyna = (DynaActionForm)form; 78 Set users = null; 79 80 AuthenticationManager am = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 81 try { 82 users = am.getUsers(); 83 if(logger.isDebugEnabled()){ 84 logger.debug(" listing users"); 85 Iterator usersIt = users.iterator(); 86 while(usersIt.hasNext()){ 87 Subject user = (Subject )usersIt.next(); 88 logger.debug(user); 89 } 90 } 91 } catch (AuthenticationException e) { 92 e.printStackTrace(); 93 } 94 List usersList = new ArrayList (users); 95 dyna.set("users",usersList); 96 97 return mapping.findForward("listUsersOK"); 98 } 99 100 108 public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 109 DynaActionForm dyna = (DynaActionForm)form; 110 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 111 Iterator itCred; 112 JGuardCredential jcred; 113 Subject user = authenticationManager.findUser((String )dyna.get("login")); 114 115 resetForm(dyna); 116 117 Set privCred = user.getPrivateCredentials(); 118 itCred = privCred.iterator(); 119 while(itCred.hasNext()) { 120 jcred = (JGuardCredential)itCred.next(); 121 dyna.set(jcred.getId(), jcred.getValue()); 122 } 123 Set pubCred = user.getPublicCredentials(); 124 itCred = pubCred.iterator(); 125 while(itCred.hasNext()) { 126 jcred = (JGuardCredential)itCred.next(); 127 dyna.set(jcred.getId(), jcred.getValue()); 128 } 129 dyna.set("oldLogin", (String )dyna.get("login")); 130 Set principals =new HashSet (user.getPrincipals()); 131 Set localPrincipals = authenticationManager.getLocalPrincipals(); 132 principals.retainAll(localPrincipals); 134 dyna.set("principals", new ArrayList (principals)); 135 136 Collection tempCol = new HashSet (authenticationManager.getLocalPrincipals()); 137 tempCol.removeAll(user.getPrincipals()); 138 request.setAttribute("allPrincipals", tempCol); 139 request.setAttribute("action", "update"); 140 return mapping.findForward("readUserOK"); 141 } 142 143 151 public ActionForward newUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 152 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 153 DynaActionForm dyna = (DynaActionForm)form; 154 155 resetForm(dyna); 156 157 request.setAttribute("allPrincipals", authenticationManager.getLocalPrincipals()); 158 request.setAttribute("action", "create"); 159 return mapping.findForward("readUserOK"); 160 } 161 162 170 public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 171 logger.debug(" into UserDispatchAction.create"); 172 173 DynaActionForm dyna = (DynaActionForm)form; 174 AuthenticationManager am = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 175 176 SubjectTemplate st = new SubjectTemplate(); 177 178 Set privRequiredCred = new HashSet (); 180 addCredential(privRequiredCred, "login", (String )dyna.get("login")); 181 addCredential(privRequiredCred, "password", (String )dyna.get("password")); 182 st.setPrivateRequiredCredentials(privRequiredCred); 184 185 186 Set publicRequiredCred = new HashSet (); 188 addCredential(publicRequiredCred, "firstname", (String )dyna.get("firstname")); 189 addCredential(publicRequiredCred, "lastname", (String )dyna.get("lastname")); 190 addCredential(publicRequiredCred, "location", (String )dyna.get("location")); 191 st.setPublicRequiredCredentials(publicRequiredCred); 193 194 195 Set privOptionalCred = new HashSet (); 197 addCredential(privOptionalCred, "country", (String )dyna.get("country")); 198 addCredential(privOptionalCred, "religion", (String )dyna.get("religion")); 199 st.setPrivateOptionalCredentials(privOptionalCred); 201 202 203 Set publicOptionalCred = new HashSet (); 205 addCredential(publicOptionalCred, "hobbies", (String )dyna.get("hobbies")); 206 st.setPublicOptionalCredentials(publicOptionalCred); 208 209 st.getPrincipals().clear(); 211 String principalsNames = (String )dyna.get("userPrincipalsNames"); 212 logger.debug(" create user: principalsNames from form ="+principalsNames); 213 214 try { 215 SubjectTemplate stClone = (SubjectTemplate)am.getDefaultSubjectTemplate().clone(); 216 stClone.getPrincipals().clear(); 217 addPrincipals(principalsNames, stClone.getPrincipals(), am); 218 Subject userCreated = am.createUser(st,stClone); 219 logger.debug("user created ="+userCreated); 220 } catch (RegistrationException e) { 221 logger.error(e.getMissingPrivateCredential()); 222 logger.error(e.getMissingPublicCredential()); 223 logger.error(e); 224 } catch (AuthenticationException e) { 225 logger.error(e); 226 } catch (CloneNotSupportedException e) { 227 logger.error(e); 228 } 229 230 return mapping.findForward("createUserOK"); 231 } 232 233 241 public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 242 243 DynaActionForm dyna = (DynaActionForm)form; 244 AuthenticationManager am = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 245 Subject user = new Subject (); 246 247 Set privCred = user.getPrivateCredentials(); 249 250 addCredential(privCred, "login", (String )dyna.get("login")); 251 addCredential(privCred, "password", (String )dyna.get("password")); 252 addCredential(privCred, "country", (String )dyna.get("country")); 253 addCredential(privCred, "religion", (String )dyna.get("religion")); 254 255 256 Set publicCred = user.getPublicCredentials(); 258 259 addCredential(publicCred, "firstname", (String )dyna.get("firstname")); 260 addCredential(publicCred, "lastname", (String )dyna.get("lastname")); 261 addCredential(publicCred, "location", (String )dyna.get("location")); 262 addCredential(publicCred, "hobbies", (String )dyna.get("hobbies")); 263 264 user.getPrincipals().clear(); 266 String principalsNames = (String )dyna.get("userPrincipalsNames"); 267 logger.debug("update user :principalsNames from form ="+principalsNames); 268 addPrincipals(principalsNames, user.getPrincipals(), am); 269 270 JGuardCredential jcred = new JGuardCredential(); 272 jcred.setId("login"); 273 jcred.setValue((String )dyna.get("oldLogin")); 274 try { 275 am.updateUser(jcred, user); 276 logger.debug("after update user content="+user); 277 } catch (AuthenticationException e) { 278 e.printStackTrace(); 279 } 280 281 282 return mapping.findForward("updateUserOK"); 283 284 } 285 286 294 public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 295 DynaActionForm dyna = (DynaActionForm)form; 296 AuthenticationManager am = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 297 298 Subject user = am.findUser((String )dyna.get("login")); 299 300 try { 301 am.deleteUser(user); 302 } catch (AuthenticationException e) { 303 logger.error(e.getMessage()); 304 } 305 306 return mapping.findForward("deleteUserOK"); 307 } 308 309 310 311 315 private void resetForm(DynaActionForm dyna) { 316 dyna.set("login", ""); 317 dyna.set("password", ""); 318 dyna.set("firstname", ""); 319 dyna.set("lastname", ""); 320 dyna.set("location", ""); 321 dyna.set("country", ""); 322 dyna.set("religion", ""); 323 dyna.set("hobbies", ""); 324 Collection tempCol = (Collection )dyna.get("principals"); 325 tempCol.clear(); 326 dyna.set("principals", tempCol); 327 } 328 329 335 private void addCredential(Set credentials, String id, String value) { 336 if(StringUtils.isNotEmpty(value)) { 337 JGuardCredential jcred = new JGuardCredential(); 338 jcred.setId(id); 339 jcred.setValue(value); 340 credentials.add(jcred); 341 } 342 } 343 344 349 private void addPrincipals(String principalNames, Set principalsSet, AuthenticationManager am) { 350 logger.debug("principalNames="+principalNames); 351 if(!"".equals(principalNames)) { 352 String [] prinNames = principalNames.split("#"); 353 for(int i=0;i<prinNames.length;i++) { 354 try { 355 logger.debug("current principal name="+prinNames[i]); 356 RolePrincipal principal = (RolePrincipal) am.getLocalPrincipal(prinNames[i]); 357 if(principal == null){ 358 logger.info("local principal not found"); 359 return; 360 } 361 logger.debug("local principal found="+principal); 362 principalsSet.add(principal); 363 } catch (AuthenticationException e) { 364 logger.error(e.getMessage()); 365 } 366 } 367 } 368 } 369 370 public ActionForward setActiveOnRolePrincipal(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 371 String roleName = request.getParameter("roleName"); 372 String applicationName = request.getParameter("applicationName"); 373 boolean active = Boolean.valueOf(request.getParameter("active")).booleanValue(); 374 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 375 HttpAuthenticationUtils auth= (HttpAuthenticationUtils)request.getSession(true).getAttribute(HttpConstants.AUTHN_UTILS); 376 try { 377 authenticationManager.setActiveOnRolePrincipal(auth.getSubject(),roleName,applicationName,active); 378 } catch (AuthenticationException e) { 379 logger.error(e.getMessage()); 380 } 381 return mapping.findForward("welcome"); 382 } 383 } 384 | Popular Tags |