KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dlog4j > action > DlogUserAction


1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU Library General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  */

16 package dlog4j.action;
17
18 import java.sql.SQLException JavaDoc;
19 import java.util.Date JavaDoc;
20
21 import javax.servlet.http.HttpServletRequest JavaDoc;
22 import javax.servlet.http.HttpServletResponse JavaDoc;
23 import javax.servlet.http.HttpSession JavaDoc;
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 /**
45  * DlogGlobalAction.java created by EasyStruts - XsltGen.
46  * http://easystruts.sf.net
47  * created on 01-31-2004
48  *
49  * XDoclet definition:
50  * @struts:action parameter="userName" validate="true"
51  * @struts:action-exception key="sql" path="/index.jsp"
52  * @struts:action-forward name="/WEB-INF/jsp/login.jsp" path="/WEB-INF/jsp/login.jsp"
53  */

54 public class DlogUserAction extends DlogActionBase {
55
56     // --------------------------------------------------------- Instance Variables
57
public final static String JavaDoc HOME_PAGE = "home";
58     public final static String JavaDoc LIST_ERROR_KEY = "list";
59     public final static String JavaDoc EDIT_ERROR_KEY = "edit";
60     // --------------------------------------------------------- Methods
61
/**
62      * 修改用户角色
63      */

64     public ActionForward doSetUserRole(
65         ActionMapping mapping,
66         ActionForm form,
67         HttpServletRequest JavaDoc request,
68         HttpServletResponse JavaDoc response)
69         throws Exception JavaDoc {
70         ActionErrors errors = new ActionErrors();
71         Session JavaDoc session = null;
72         UserForm user = (UserForm)form;
73         //判断用户是否登陆
74
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 JavaDoc(user.getId()));
84                 if(old!=null) {
85                     old.setUserRole(user.getUserRole());
86                     old.setPassword(user.getPassword());
87                     String JavaDoc[] cats = request.getParameterValues("allowCat");
88                     String JavaDoc 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 JavaDoc 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 JavaDoc e){
106                 getServlet().log("修改用户资料失败",e);
107             } finally {
108                 commitSession(session, true);
109             }
110         }
111         // Report any errors we have discovered back to the original form
112
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     /**
122      * 用户注册
123      */

124     public ActionForward doDeleteUser(
125         ActionMapping mapping,
126         ActionForm form,
127         HttpServletRequest JavaDoc request,
128         HttpServletResponse JavaDoc response,
129         String JavaDoc userid)
130         throws Exception JavaDoc
131     {
132         ActionErrors errors = new ActionErrors();
133         Session JavaDoc session = null;
134         //判断用户是否登陆
135
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)//还有日记不允许删除
150
errors.add(LIST_ERROR_KEY,new ActionError("logs_not_empty"));
151                     else
152                     if(replycount>0)//还有评论不允许删除
153
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 JavaDoc 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         // Report any errors we have discovered back to the original form
168
ActionForward forward = mapping.getInputForward();
169         if (!errors.isEmpty())
170             saveErrors(request, errors);
171         else{
172             if(request.getParameter("page")!=null){
173                 StringBuffer JavaDoc path = new StringBuffer JavaDoc(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     /**
184      * 用户注册
185      */

186     public ActionForward doAddUser(
187         ActionMapping mapping,
188         ActionForm form,
189         HttpServletRequest JavaDoc request,
190         HttpServletResponse JavaDoc response)
191         throws Exception JavaDoc {
192         Session JavaDoc session = null;
193         UserForm user = (UserForm) form;
194         ActionErrors es = new ActionErrors();
195         boolean needCommit = false;
196         try {
197             //检查用户名
198
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             //昵称
204
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//检查密码
211
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//检查电子邮件
217
if(StringUtils.isNotEmpty(user.getEmail()) && user.getEmail().indexOf('@')==-1)
218                 es.add("email",new ActionError("email_error"));
219             //检查用户名是否已存在
220
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                         //注册验证码检查
233
String JavaDoc 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     /**
259      * 用户资料修改
260      */

261     public ActionForward doEditUser(
262         ActionMapping mapping,
263         ActionForm form,
264         HttpServletRequest JavaDoc request,
265         HttpServletResponse JavaDoc response)
266         throws Exception JavaDoc {
267         UserForm user = (UserForm) form;
268         Session JavaDoc 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//检查密码
282
if(user.getPassword()!=null && user.getPassword().length()>16)
283                 es.add("password",new ActionError("password_too_long"));
284             else//检查电子邮件
285
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 JavaDoc(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     /**
324     * 用户登录
325     */

326     public ActionForward doLogin(
327         ActionMapping mapping,
328         ActionForm form,
329         HttpServletRequest JavaDoc request,
330         HttpServletResponse JavaDoc response)
331         throws Exception JavaDoc {
332         Session JavaDoc 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 JavaDoc password = user.getPassword();
340                 user = UserManager.getUser(ssn,SiteManager.getCurrentSite(request),user.getLoginName());
341                 //检查用户名是否存在
342
if(user!=null) {
343                     //检查用户是否被暂停
344
if(user.getUserRole()==DlogRole.ROLE_GUEST)
345                         es.add("login",new ActionError("user_pause"));
346                     //检查密码
347
else
348                     if(StringUtils.equals(user.getPassword(),password)){
349                         if(user.isAdmin() && user.getLastTime()==null)
350                             firstLogin = true;
351                         //保存用户信息至会话
352
user.setLastTime(new Date JavaDoc());
353                         user.setLoginCount(user.getLoginCount()+1);
354                         ssn.update(user);
355                         UserManager.fillUserWithLogAndReplyCount(ssn, user, false);
356                         //集成web-security的权限控制
357
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                         //保存用户资料到会话
365
user.saveLoginUser(request);
366                         //用户登录跟踪
367
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 JavaDoc e){
380             getServlet().log("用户登录失败",e);
381         } finally {
382             closeSession(ssn);
383         }
384         String JavaDoc curPage = request.getParameter("curPage");
385         ActionForward forward = null;
386         if(!es.isEmpty()){
387             //如果失败返回输入页,登录页对应的输入页是首页
388
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     /**
404     * 用户注销
405     */

406     public ActionForward doLogout(
407         ActionMapping mapping,
408         ActionForm form,
409         HttpServletRequest JavaDoc request,
410         HttpServletResponse JavaDoc response)
411         throws Exception JavaDoc {
412         HttpSession JavaDoc ssn = request.getSession(false);
413         if(ssn!=null) {
414             UserForm.removeFromSession(request);
415             //ssn.invalidate();(如果使session失效则连currentSite也获取不到)
416
}
417         return mapping.findForward("home");
418     }
419     /**
420      * Method execute
421      * @param ActionMapping mapping
422      * @param ActionForm form
423      * @param HttpServletRequest request
424      * @param HttpServletResponse response
425      * @return ActionForward
426      * @throws Exception
427      */

428     public ActionForward doDefault(
429         ActionMapping mapping,
430         ActionForm form,
431         HttpServletRequest JavaDoc request,
432         HttpServletResponse JavaDoc response)
433         throws Exception JavaDoc {
434         return mapping.findForward(HOME_PAGE);
435     }
436
437 }
438
Popular Tags