| 1 23 24 25 package com.sun.appserv.security; 26 27 import java.util.Properties ; 28 import java.util.logging.Logger ; 29 import java.util.logging.Level ; 30 import java.security.AccessController ; 31 import java.security.PrivilegedAction ; 32 import java.security.PrivilegedExceptionAction ; 33 34 import javax.servlet.http.HttpServletRequest ; 35 import javax.servlet.http.HttpServletResponse ; 36 37 import com.sun.logging.LogDomains; 38 import com.sun.enterprise.appclient.AppContainer; 39 import com.sun.enterprise.security.auth.LoginContextDriver; 40 import com.sun.enterprise.security.auth.login.ClientPasswordLoginModule; 41 import com.sun.enterprise.server.ApplicationServer; 42 import com.sun.web.security.WebProgrammaticLogin; 43 44 45 67 68 public class ProgrammaticLogin 69 { 70 private static Logger logger = 71 LogDomains.getLogger(LogDomains.SECURITY_LOGGER); 72 73 private static ProgrammaticLoginPermission plLogin = 74 new ProgrammaticLoginPermission("login"); 75 76 private static ProgrammaticLoginPermission plLogout = 77 new ProgrammaticLoginPermission("logout"); 78 79 private static boolean isServer = 80 (ApplicationServer.getServerContext() != null); 81 82 private static javax.security.auth.callback.CallbackHandler handler = new com.sun.enterprise.security.auth.login.LoginCallbackHandler(false); 83 84 110 public Boolean login(final String user, final String password, 111 final String realm, boolean errors) throws Exception  112 { 113 Boolean authenticated = null; 114 try { 116 117 checkLoginPermission(user); 119 120 authenticated = (Boolean ) 123 AccessController.doPrivileged(new PrivilegedAction () { 124 public java.lang.Object run() { 125 if (isServer) { 127 LoginContextDriver.login(user, password, realm); 128 } else { 129 int type = AppContainer.USERNAME_PASSWORD; 130 System.setProperty( 131 ClientPasswordLoginModule.LOGIN_NAME, user); 132 System.setProperty( 133 ClientPasswordLoginModule.LOGIN_PASSWORD, 134 password); 135 LoginContextDriver.doClientLogin(type, handler); 137 } 138 return Boolean.valueOf(true); 139 } 140 }); 141 } catch (Exception e) { 142 logger.severe("Programmatic login failed: "+e.toString()); 143 if(errors == true){ throw e; 145 } else{ 146 authenticated = Boolean.valueOf(false); 147 } 148 } 149 return authenticated; 150 } 151 152 172 public Boolean login(final String user, final String password) 173 { 174 Boolean authenticated = null; 176 try{ 177 authenticated = login(user, password, null, false); 178 } catch(Exception e){ 179 authenticated = Boolean.valueOf(false); 181 } 182 return authenticated; 183 } 184 204 public Boolean login(final String user, final String password, 205 final String realm, 206 final HttpServletRequest request, 207 final HttpServletResponse response, boolean errors) 208 throws Exception  209 { 210 Boolean authenticated = null; 211 try{ 212 checkLoginPermission(user); 214 authenticated = (Boolean ) 217 AccessController.doPrivileged(new PrivilegedAction () { 218 public java.lang.Object run() { 219 return WebProgrammaticLogin.login(user, password, realm, 220 request, response); 221 } 222 }); 223 } catch(Exception e){ 224 if(errors != true){ 225 authenticated = Boolean.valueOf(false); 226 } else{ 227 throw e; 228 } 229 } 230 return authenticated; 231 } 232 233 251 public Boolean login(final String user, final String password, 252 final HttpServletRequest request, 253 final HttpServletResponse response) 254 { 255 Boolean authenticated = null; 256 try{ 257 authenticated = login(user, password, null, request, response, false); 259 }catch (Exception e){ 260 authenticated = Boolean.valueOf(false); 262 } 263 return authenticated; 264 } 265 271 public Boolean logout() 272 { 273 Boolean loggedout = null; 274 try{ 275 loggedout = logout(false); 276 } catch(Exception e){ 277 loggedout = Boolean.valueOf(false); 279 } 280 return loggedout; 281 } 282 292 public Boolean logout(boolean errors) throws Exception  293 { 294 Boolean loggedout = null; 295 try{ 297 checkLogoutPermission(); 298 AccessController.doPrivileged(new PrivilegedAction () { 299 public java.lang.Object run() { 300 if (isServer) { 301 LoginContextDriver.logout(); 302 } else { 303 Properties sysProp = System.getProperties(); 304 sysProp.remove(ClientPasswordLoginModule.LOGIN_NAME); 305 sysProp.remove(ClientPasswordLoginModule.LOGIN_PASSWORD); 306 LoginContextDriver.doClientLogout(); 307 } 311 return null; 312 } 313 }); 314 loggedout = Boolean.valueOf(true); 315 } catch (Exception e) { 316 logger.log(Level.WARNING, "Programmatic logout failed: "+e.toString()); 317 if(errors){ 318 throw e; 319 } else{ 320 loggedout = Boolean.valueOf(false); 321 } 322 } 323 return loggedout; 324 } 325 326 334 public Boolean logout(final HttpServletRequest request, 335 final HttpServletResponse response) 336 { 337 Boolean loggedout = null; 338 try{ 339 loggedout = logout(request, response, false); 340 }catch(Exception e){ 341 loggedout = Boolean.valueOf(false); 343 } 344 return loggedout; 345 } 346 347 359 public Boolean logout(final HttpServletRequest request, 360 final HttpServletResponse response, 361 boolean errors) throws Exception  362 { 363 Boolean loggedout = null; 365 try{ 366 checkLogoutPermission(); 367 loggedout = (Boolean ) 368 AccessController.doPrivileged(new PrivilegedExceptionAction () { 369 public java.lang.Object run() throws Exception { 370 return WebProgrammaticLogin.logout(request, response); 371 } 372 }); 373 }catch(Exception e){ 374 if(errors){ 375 throw e; 376 }else{ 377 loggedout = Boolean.valueOf(false); 378 } 379 } 380 return loggedout; 381 } 382 383 384 388 private void checkLoginPermission(String user) throws Exception  389 { 390 try { 391 if(logger.isLoggable(Level.FINE)){ 392 logger.log(Level.FINE, "ProgrammaticLogin.login() called for user: " 393 + user); 394 } 395 SecurityManager sm = System.getSecurityManager(); 396 if (sm != null) { 397 sm.checkPermission(plLogin); 398 } 399 400 } catch (Exception e) { 401 logger.warning("proglogin.noperm"); 402 throw e; 403 } 404 } 405 406 407 411 private void checkLogoutPermission() throws Exception  412 { 413 try { 414 if(logger.isLoggable(Level.FINE)){ 415 logger.log(Level.FINE, "ProgrammaticLogin.logout() called."); 416 } 417 SecurityManager sm = System.getSecurityManager(); 418 if (sm != null) { 419 sm.checkPermission(plLogout); 420 } 421 422 } catch (Exception e) { 423 logger.warning("prologout.noperm"); 424 throw e; 425 } 426 } 427 428 429 430 431 } 432 | Popular Tags |