1 64 65 70 package com.jcorporate.expresso.ext.taglib; 71 72 import com.jcorporate.expresso.core.controller.ControllerException; 73 import com.jcorporate.expresso.core.controller.NonHandleableException; 74 import com.jcorporate.expresso.core.jsdkapi.GenericDispatcher; 75 import com.jcorporate.expresso.core.misc.ConfigManager; 76 import com.jcorporate.expresso.core.misc.CurrentLogin; 77 import com.jcorporate.expresso.core.misc.StringUtil; 78 import com.jcorporate.expresso.core.security.User; 79 import com.jcorporate.expresso.core.servlet.CheckLogin; 80 import com.jcorporate.expresso.kernel.util.FastStringBuffer; 81 import org.apache.log4j.Logger; 82 import org.apache.struts.config.ActionConfig; 83 84 import javax.servlet.ServletException ; 85 import javax.servlet.http.HttpServletRequest ; 86 import javax.servlet.http.HttpServletResponse ; 87 import javax.servlet.jsp.JspTagException ; 88 import java.io.IOException ; 89 90 91 98 public class Login 99 extends ExpressoTagSupport { 100 private String db = null; 101 private String forward = null; 102 private static final String defaultLoginUrl = "/Login.do"; 103 private static final Logger log = Logger.getLogger(Login.class); 104 105 public Login() { 106 super(); 107 } 108 109 public int doStartTag() throws javax.servlet.jsp.JspException { 110 return EVAL_BODY_INCLUDE; 111 } 112 113 public int doEndTag() 114 throws JspTagException { 115 HttpServletRequest request = (HttpServletRequest ) pageContext.getRequest(); 116 HttpServletResponse response = (HttpServletResponse ) pageContext.getResponse(); 117 118 try { 122 CheckLogin chk = CheckLogin.getInstance(); 123 chk.checkLogin(request); 124 125 CurrentLogin myLogin = (CurrentLogin) pageContext.getSession().getAttribute(CurrentLogin.LOGIN_KEY); 126 127 if (myLogin == null) { 128 throw new JspTagException ("Unable to estabish session"); 129 } 130 131 String userName = myLogin.getUserName(); 132 String currentDB = myLogin.getDBName(); 133 134 if ((userName.equals("") || userName.equals(User.UNKNOWN_USER))) { 135 if (log.isDebugEnabled()) { 136 log.debug("Sending to login"); 137 } 138 139 return sendToLogin(request, response, chk); 140 } 141 142 if (db != null) { 143 if (!currentDB.equals(db)) { 144 if (!chk.loginViaCookie(request, db)) { 145 if (log.isDebugEnabled()) { 146 log.debug("Failed to log in via cookie, redirecting to login"); 147 } 148 return sendToLogin(request, response, chk); 149 } 150 } 151 152 } 153 154 155 if (log.isDebugEnabled()) { 156 log.debug("getting current login"); 157 } 158 myLogin = (CurrentLogin) pageContext.getSession().getAttribute(CurrentLogin.LOGIN_KEY); 159 160 if (myLogin == null) { 161 return sendToLogin(request, response, chk); 162 } 163 164 if (myLogin.getUserName().equals(User.UNKNOWN_USER)) { 165 return sendToLogin(request, response, chk); 166 } 167 168 return EVAL_PAGE; 169 } catch (IOException e) { 170 log.error(e); 171 throw new JspTagException (e.getMessage()); 172 } catch (ServletException e) { 173 log.error(e); 174 throw new JspTagException (e.getMessage()); 175 } catch (NonHandleableException e) { 176 log.error(e); 177 throw new JspTagException (e.getMessage()); 178 } catch (Exception e) { 179 log.error(e); 180 throw new JspTagException (e.getMessage()); 181 } 182 } 183 184 192 private int sendToLogin(HttpServletRequest request, 193 HttpServletResponse response, CheckLogin chk) 194 throws JspTagException { 195 if (forward != null) { 196 if (forward.equals("false")) { 197 try { 198 chk.logInAsNone(request, db); 199 } catch (ServletException se) { 200 log.error(se); 201 throw new JspTagException ("Could not log in as 'NONE'"); 202 } 203 204 return EVAL_PAGE; 205 } 206 } 207 208 if (log.isDebugEnabled()) { 209 log.debug("User was not logged in - sending to login page"); 210 } 211 212 try { 213 FastStringBuffer fsb = new FastStringBuffer(128); 214 ActionConfig am = ConfigManager.getActionConfig(com.jcorporate.expresso.services.controller 215 .LoginController.getLoginController().getClass().getName(), null); 216 217 if (am != null) { 218 fsb.append(StringUtil.notNull(am.getPath())); 219 fsb.append(".do"); 220 } else { 221 fsb.append(defaultLoginUrl); 222 } 223 224 if (db != null) { 225 fsb.append("?dbContext="); 226 fsb.append(db); 227 } else { 228 fsb.append("&state=promptLogin"); 229 } 230 String loginUrl = fsb.toString(); 231 232 if (log.isDebugEnabled()) { 233 log.debug("Forwarding to '" + loginUrl + "'"); 234 } 235 236 GenericDispatcher.forward(request, response, loginUrl); 237 238 return SKIP_PAGE; 239 } catch (ServletException se) { 240 log.error(se); 241 throw new JspTagException (se.getMessage()); 242 } catch (IOException se) { 243 log.error(se); 244 throw new JspTagException (se.getMessage()); 245 } catch (NullPointerException np) { 246 log.error(np); 247 throw new JspTagException (np.getMessage()); 248 } catch (ControllerException ce) { 249 log.error("Unable to find appropriate login Controller", ce); 250 throw new JspTagException (ce.getMessage()); 251 } 252 } 253 254 public String getDb() { 255 return db; 256 } 257 258 public void setDb(String newDb) { 259 db = newDb; 260 } 261 262 public String getForward() { 263 return forward; 264 } 265 266 public void setForward(String newForward) { 267 forward = newForward; 268 } 269 } 270 | Popular Tags |