1 16 package dlog4j.action; 17 18 import java.sql.SQLException ; 19 import java.util.Date ; 20 21 import javax.servlet.http.HttpServletRequest ; 22 import javax.servlet.http.HttpServletResponse ; 23 import javax.servlet.http.HttpSession ; 24 25 import net.sf.hibernate.HibernateException; 26 import net.sf.hibernate.Session; 27 28 import org.apache.commons.lang.StringUtils; 29 import org.apache.struts.action.ActionError; 30 import org.apache.struts.action.ActionErrors; 31 import org.apache.struts.action.ActionForm; 32 import org.apache.struts.action.ActionForward; 33 import org.apache.struts.action.ActionMapping; 34 35 import dlog4j.RandomImageServlet; 36 import dlog4j.SiteManager; 37 import dlog4j.UserManager; 38 import dlog4j.formbean.LoginTrackBean; 39 import dlog4j.formbean.SiteForm; 40 import dlog4j.formbean.UserForm; 41 import dlog4j.security.DlogRole; 42 import dlog4j.security.SecurityConfig; 43 44 54 public class DlogUserAction extends DlogActionBase { 55 56 public final static String HOME_PAGE = "home"; 58 public final static String LIST_ERROR_KEY = "list"; 59 public final static String EDIT_ERROR_KEY = "edit"; 60 64 public ActionForward doSetUserRole( 65 ActionMapping mapping, 66 ActionForm form, 67 HttpServletRequest request, 68 HttpServletResponse response) 69 throws Exception { 70 ActionErrors errors = new ActionErrors(); 71 Session session = null; 72 UserForm user = (UserForm)form; 73 UserForm loginUser = getLoginUser(request); 75 if(loginUser==null || !loginUser.isLogin()) 76 errors.add(LIST_ERROR_KEY,new ActionError("operation_need_login")); 77 else if(!loginUser.isAdmin()) 78 errors.add(LIST_ERROR_KEY,new ActionError("only_owner_allow")); 79 else{ 80 try { 81 session = getSession(); 82 SiteForm site = SiteManager.getCurrentSite(request); 83 UserForm old = (UserForm)session.load(UserForm.class,new Integer (user.getId())); 84 if(old!=null) { 85 old.setUserRole(user.getUserRole()); 86 old.setPassword(user.getPassword()); 87 String [] cats = request.getParameterValues("allowCat"); 88 String scat = ""; 89 for(int i=0;cats!=null && i<cats.length;i++){ 90 scat += cats[i]; 91 if((i+1)<cats.length) 92 scat += ','; 93 } 94 old.setCats(scat); 95 session.update(old); 96 } 97 else 98 errors.add(LIST_ERROR_KEY,new ActionError("user_not_found")); 99 } catch(SQLException e) { 100 getServlet().log("修改用户资料失败",e); 101 errors.add(LIST_ERROR_KEY,new ActionError("database_exception")); 102 } catch(HibernateException e) { 103 getServlet().log("修改用户资料失败",e); 104 errors.add(LIST_ERROR_KEY,new ActionError("hibernate_exception")); 105 } catch(Exception e){ 106 getServlet().log("修改用户资料失败",e); 107 } finally { 108 commitSession(session, true); 109 } 110 } 111 ActionForward forward = mapping.getInputForward(); 113 if (!errors.isEmpty()) 114 saveErrors(request, errors); 115 else{ 116 forward.setPath(forward.getPath()+"?page="+request.getParameter("page")); 117 forward.setRedirect(true); 118 } 119 return forward; 120 } 121 124 public ActionForward doDeleteUser( 125 ActionMapping mapping, 126 ActionForm form, 127 HttpServletRequest request, 128 HttpServletResponse response, 129 String userid) 130 throws Exception 131 { 132 ActionErrors errors = new ActionErrors(); 133 Session session = null; 134 UserForm loginUser = getLoginUser(request); 136 if(loginUser==null || !loginUser.isLogin()) 137 errors.add(LIST_ERROR_KEY,new ActionError("operation_need_login")); 138 else if(!loginUser.isAdmin()) 139 errors.add(LIST_ERROR_KEY,new ActionError("only_owner_allow")); 140 else{ 141 try { 142 session = getSession(); 143 int uid = Integer.parseInt(userid); 144 SiteForm site = SiteManager.getCurrentSite(request); 145 UserForm user = UserManager.getUser(session,uid,false); 146 if(user!=null) { 147 int logcount = user.getLogCount(); 148 int replycount = user.getReplyCount(); 149 if(logcount>0) errors.add(LIST_ERROR_KEY,new ActionError("logs_not_empty")); 151 else 152 if(replycount>0) errors.add(LIST_ERROR_KEY,new ActionError("replies_not_empty")); 154 else 155 session.delete(user); 156 } 157 else 158 errors.add(LIST_ERROR_KEY,new ActionError("user_not_found")); 159 } catch(SQLException e) { 160 errors.add(LIST_ERROR_KEY,new ActionError("database_exception")); 161 } catch(HibernateException e) { 162 errors.add(LIST_ERROR_KEY,new ActionError("hibernate_exception")); 163 } finally { 164 commitSession(session, true); 165 } 166 } 167 ActionForward forward = mapping.getInputForward(); 169 if (!errors.isEmpty()) 170 saveErrors(request, errors); 171 else{ 172 if(request.getParameter("page")!=null){ 173 StringBuffer path = new StringBuffer (forward.getPath()); 174 path.append("?page="); 175 path.append(request.getParameter("page")); 176 forward = new ActionForward(path.toString(),true); 177 } 178 else 179 forward.setRedirect(true); 180 } 181 return forward; 182 } 183 186 public ActionForward doAddUser( 187 ActionMapping mapping, 188 ActionForm form, 189 HttpServletRequest request, 190 HttpServletResponse response) 191 throws Exception { 192 Session session = null; 193 UserForm user = (UserForm) form; 194 ActionErrors es = new ActionErrors(); 195 boolean needCommit = false; 196 try { 197 if(StringUtils.isEmpty(user.getLoginName())) 199 es.add("loginName",new ActionError("loginName_error")); 200 else 201 if(user.getLoginName().length()>16) 202 es.add("loginName",new ActionError("loginname_too_long")); 203 else 205 if(StringUtils.isEmpty(user.getDisplayName())) 206 es.add("displayName",new ActionError("displayName_empty")); 207 else 208 if(user.getDisplayName().length()>16) 209 es.add("displayName",new ActionError("displayName_exceed_length")); 210 else if(StringUtils.isEmpty(user.getPassword())) 212 es.add("password",new ActionError("password_empty")); 213 else 214 if(user.getPassword().length()>16) 215 es.add("password",new ActionError("password_too_long")); 216 else if(StringUtils.isNotEmpty(user.getEmail()) && user.getEmail().indexOf('@')==-1) 218 es.add("email",new ActionError("email_error")); 219 else{ 221 user.setSite(SiteManager.getCurrentSite(request)); 222 session = getSession(); 223 UserForm userForm = UserManager.getUser(session,user.getSite(),user.getLoginName()); 224 if(userForm!=null) 225 es.add("loginName",new ActionError("loginName_exist")); 226 else{ 227 UserForm userForm2 = UserManager.getUser(session,user.getSite(),user.getDisplayName()); 228 if(userForm2!=null) 229 es.add("displayName",new ActionError("displayName_exits")); 230 else{ 231 user.setUserRole(DlogRole.ROLE_COMMON); 232 String verifyCode = request.getParameter("verifyCode"); 234 if(!StringUtils.equals(verifyCode,RandomImageServlet.getRandomLoginKey(request))) 235 es.add("verifyCode",new ActionError("verifyCode_error")); 236 else { 237 UserForm u = UserManager.createUser(session,user); 238 u.saveLoginUser(request); 239 needCommit = true; 240 } 241 } 242 } 243 } 244 } finally { 245 if(session!=null){ 246 if(needCommit) 247 commitSession(session, true); 248 else 249 closeSession(session); 250 } 251 } 252 if(!es.isEmpty()){ 253 saveErrors(request, es); 254 return mapping.getInputForward(); 255 } 256 return mapping.findForward(HOME_PAGE); 257 } 258 261 public ActionForward doEditUser( 262 ActionMapping mapping, 263 ActionForm form, 264 HttpServletRequest request, 265 HttpServletResponse response) 266 throws Exception { 267 UserForm user = (UserForm) form; 268 Session session = null; 269 ActionErrors es = new ActionErrors(); 270 boolean needCommit = false; 271 try { 272 UserForm loginUser = UserForm.getLoginUser(request); 273 if(loginUser==null || user.getId()!=loginUser.getId()) 274 es.add("name",new ActionError("operation_not_allow")); 275 else 276 if(StringUtils.isEmpty(user.getDisplayName())) 277 es.add("displayName",new ActionError("displayName_empty")); 278 else 279 if(user.getDisplayName().length()>16) 280 es.add("displayName",new ActionError("displayName_exceed_length")); 281 else if(user.getPassword()!=null && user.getPassword().length()>16) 283 es.add("password",new ActionError("password_too_long")); 284 else if(StringUtils.isNotEmpty(user.getEmail()) && user.getEmail().indexOf('@')==-1) 286 es.add("email",new ActionError("email_error")); 287 else{ 288 session = getSession(); 289 UserForm u = (UserForm)session.load(UserForm.class,new Integer (user.getId())); 290 if(u!=null) { 291 u.setDisplayName(user.getDisplayName()); 292 u.setEmail(user.getEmail()); 293 u.setHomePage(user.getHomePage()); 294 u.setResume(user.getResume()); 295 if(!StringUtils.isEmpty(user.getPassword())) { 296 u.setPassword(user.getPassword()); 297 } 298 u.setPortrait(user.getPortrait()); 299 session.update(u); 300 needCommit = true; 301 loginUser.setDisplayName(user.getDisplayName()); 302 loginUser.setEmail(user.getEmail()); 303 loginUser.setHomePage(user.getHomePage()); 304 loginUser.setResume(user.getResume()); 305 loginUser.setPortrait(user.getPortrait()); 306 loginUser.saveLoginUser(request); 307 } 308 else 309 es.add("loginName",new ActionError("loginName_noexits")); 310 } 311 } finally { 312 if(session!=null){ 313 if(needCommit) 314 commitSession(session, true); 315 else 316 closeSession(session); 317 } 318 } 319 if(!es.isEmpty()) 320 saveErrors(request,es); 321 return mapping.findForward(HOME_PAGE); 322 } 323 326 public ActionForward doLogin( 327 ActionMapping mapping, 328 ActionForm form, 329 HttpServletRequest request, 330 HttpServletResponse response) 331 throws Exception { 332 Session ssn = null; 333 ActionErrors es = new ActionErrors(); 334 boolean firstLogin = false; 335 try { 336 ssn = getSession(); 337 UserForm user = (UserForm) form; 338 if (user.getLoginName()!=null) { 339 String password = user.getPassword(); 340 user = UserManager.getUser(ssn,SiteManager.getCurrentSite(request),user.getLoginName()); 341 if(user!=null) { 343 if(user.getUserRole()==DlogRole.ROLE_GUEST) 345 es.add("login",new ActionError("user_pause")); 346 else 348 if(StringUtils.equals(user.getPassword(),password)){ 349 if(user.isAdmin() && user.getLastTime()==null) 350 firstLogin = true; 351 user.setLastTime(new Date ()); 353 user.setLoginCount(user.getLoginCount()+1); 354 ssn.update(user); 355 UserManager.fillUserWithLogAndReplyCount(ssn, user, false); 356 DlogRole role = (DlogRole)SecurityConfig.getConfig().getRoleById(user.getUserRole()&31); 358 if(role==null){ 359 role = SecurityConfig.getConfig().getRoleById(DlogRole.ROLE_COMMON); 360 user.setUserRole(DlogRole.ROLE_COMMON); 361 ssn.update(user); 362 } 363 user.setRole(role); 364 user.saveLoginUser(request); 366 LoginTrackBean ltb = new LoginTrackBean(request); 368 ssn.save(ltb); 369 commitSession(ssn,false); 370 } 371 else 372 es.add("login",new ActionError("password_error")); 373 } 374 else 375 es.add("login",new ActionError("loginName_noexits")); 376 } 377 else 378 es.add("login",new ActionError("loginName_error")); 379 }catch(Exception e){ 380 getServlet().log("用户登录失败",e); 381 } finally { 382 closeSession(ssn); 383 } 384 String curPage = request.getParameter("curPage"); 385 ActionForward forward = null; 386 if(!es.isEmpty()){ 387 forward = mapping.getInputForward(); 389 saveErrors(request, es); 390 } 391 else{ 392 if(firstLogin) 393 forward = mapping.findForward("catmgr"); 394 else{ 395 if(StringUtils.isEmpty(curPage)) 396 forward = mapping.findForward("home"); 397 else 398 forward = new ActionForward(curPage,true); 399 } 400 } 401 return forward; 402 } 403 406 public ActionForward doLogout( 407 ActionMapping mapping, 408 ActionForm form, 409 HttpServletRequest request, 410 HttpServletResponse response) 411 throws Exception { 412 HttpSession ssn = request.getSession(false); 413 if(ssn!=null) { 414 UserForm.removeFromSession(request); 415 } 417 return mapping.findForward("home"); 418 } 419 428 public ActionForward doDefault( 429 ActionMapping mapping, 430 ActionForm form, 431 HttpServletRequest request, 432 HttpServletResponse response) 433 throws Exception { 434 return mapping.findForward(HOME_PAGE); 435 } 436 437 } 438 | Popular Tags |