在web开发过程中,我们首先会在web.xml中配置一下,对每个请求的.jsp文件都需要进行过滤一下,看看用户是否登陆的验证:
<filter> <filter-name>sessionFilter</filter-name> <filter-class>grp.pt.common.filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
那么不管登陆任何*.jsp的时候,总要经过过滤器sessionFilter一回。对应的类:SessionFilter 这个过滤器就是检查用户是否登陆。
public class SessionFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest requestHttp = (HttpServletRequest) arg0; String path = requestHttp.getServletPath(); if(path.indexOf("RedirectPage.jsp") > 0 || path.indexOf("Login.jsp")>0) { arg2.doFilter(arg0, arg1); return; } HttpSession session = requestHttp.getSession(); if (session.getAttribute("user") == null) { arg0.setAttribute("message", "登陆超时,请重新登陆!"); RequestDispatcher requestDispatcher = arg0.getRequestDispatcher("/jsp/common/Login.jsp"); requestDispatcher.forward(arg0, arg1); return ; } arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { } }
Ext.Ajax.request({ url : "<%=path%>/common/loginCheck.action", //这个地方的loginCheck.action是用对应类的loginCheck()方法来核对用户名和密码的 method : 'POST', form : "myForm", params : { userCode : usercode, userPass : Ext.getDom("txtPassword").value }, // 提交成功的回调函数 success : function(response, options) { if (response.responseText == "OK") { window.location.href = "<%=path%>/jsp/common/Index.jsp"; } else if (response.responseText == "ERROR") { Ext.getDom("Validate").innerHTML = "<SPAN style='DISPLAY:inline;COLOR:#960014;font-size:14px'>用户名或密码错误!</SPAN>"; } }, // 提交失败的回调函数 failure : function(response, options) { Ext.getDom("Validate").innerHTML = "<SPAN style='DISPLAY:inline;COLOR:#960014;font-size:14px'>后台数据访问失败!</SPAN>"; } }); }
我们找到:url : "<%=path%>/common/loginCheck.action
看看关于:user = userService.getUserByCode(userCode); session.setAttribute("user", user);
package grp.pt.common.action; import grp.pt.framework.Interfece.IMasterDataService; import grp.pt.framework.Interfece.IOrgService; import grp.pt.framework.Interfece.IUserService; import grp.pt.framework.model.ElementDTO; import grp.pt.framework.model.Organization; import grp.pt.framework.model.Session; import grp.pt.framework.model.User; import grp.pt.util.MD5; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import assp.evoucher.common.adapter.SignAndDEnvelopeAdaptHandler; public class LoginAction extends BaseAction{ private IUserService userService; private IOrgService orgService; private IMasterDataService masterDataService; public Logger logger = Logger.getLogger(LoginAction.class); public IMasterDataService getMasterDataService() { return masterDataService; } public void setMasterDataService(IMasterDataService masterDataService) { this.masterDataService = masterDataService; } public IOrgService getOrgService() { return orgService; } public void setOrgService(IOrgService orgService) { this.orgService = orgService; } public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService = userService; } //用户登陆 public String loginCheck(){ HttpServletRequest req = ServletActionContext.getRequest(); //把用户名和密码取过来。 String userCode = req.getParameter("userCode"); String userPass = req.getParameter("userPass"); User user = null; HttpSession session = req.getSession(); //设置过期时间为20分钟 session.setMaxInactiveInterval(20*60); //用户编码校验 if(userCode != null && userPass != null){ user = userService.getUserByCode(userCode); //如果说这个用户不存在 if(user == null){ this.actionWrite("ERROR"); return null; } } //区划 id code //得到所属机构 Organization organization = orgService.loadOrgById(user.getBelong_org()); //如果说机构不为null if(organization != null){ //得到所属区划 long rg_id = organization.getRg_id(); Session userSession = new Session(); //得到所属的一级部门 userSession.setTop_org(user.getBelong_org()); //根据要素编码查询对于的要素(实际上是从数据字典里面查,然后赋给也是一个基础数据结构 ElementDTO dto = masterDataService.loadEleValueById(userSession , "REGION", rg_id); session.setAttribute("rg_id", rg_id); session.setAttribute("rg_code", dto.getCode()); session.setAttribute("is_top_region", dto.getParent_id() == 0 ?1+"" : 0+""); userSession.setRgCode(dto.getCode()); //dto.getCode得到编码 user.setRg_code(dto.getCode()); } //用户密码证书校验 //userCode是从客户端取出来的 if(userService.verifyUserPwd(userCode, MD5.createPassword(userPass))){ session.setAttribute("user", user); this.actionWrite("OK"); }else{ this.actionWrite("ERROR"); } return null; } public boolean checks(String s1,String[] s2){ String s=s1; for(String s3:s2){ if(s.equals(s3)){ return true; } } return false; } //检测用户名 public String loginChe(){ HttpServletRequest req = ServletActionContext.getRequest(); HttpServletResponse response=ServletActionContext.getResponse(); String userCode = req.getParameter("userCode"); User user = null; user = userService.getUserByCode(userCode); if(user == null){ this.actionWrite("该用户不存在!"); return null; }else{ String username=user.getName(); response.setContentType("textml;charset=UTF-8"); int logintype=user.getLogin_level(); if(logintype==0){ this.actionWrite("OK,"+username+","+userCode); }else if(logintype==1){ this.actionWrite("OK1,"+username+","+userCode); }else{ throw new RuntimeException("用户登录级别有问题:"+logintype+"级"); } } return null; } //UKEY用户登录 public String checkUkey(){ HttpServletRequest res=ServletActionContext.getRequest(); HttpSession session = res.getSession(); User user = null; String userCode = res.getParameter("userCode"); user = userService.getUserByCode(userCode); if(user == null){ this.actionWrite("ERROR"); return null; }else{ Organization organization = orgService.loadOrgById(user.getBelong_org()); if(organization != null){ long rg_id = organization.getRg_id(); Session userSession = new Session(); userSession.setTop_org(user.getBelong_org()); ElementDTO dto = masterDataService.loadEleValueById(userSession , "REGION", rg_id); session.setAttribute("rg_id", rg_id); session.setAttribute("rg_code", dto.getCode()); session.setAttribute("is_top_region", dto.getParent_id() == 0 ?1+"" : 0+""); userSession.setRgCode(dto.getCode()); user.setRg_code(dto.getCode()); } String signword=res.getParameter("signword"); String orgword=res.getParameter("testword"); byte[] originData=orgword.getBytes(); int result = -1; try { result = SignAndDEnvelopeAdaptHandler.verifyServerMessage(signword.getBytes(),originData); if(result==0){ session.setAttribute("user", user); this.actionWrite("OK"); }else{ this.actionWrite("ERROR"); } } catch (Exception e) { logger.error(e); this.actionWrite("ERROR"); } } return null; } //用户注销 public String logoff() throws Exception{ HttpServletRequest req = ServletActionContext.getRequest(); HttpSession session = req.getSession(); if(session != null) { session.removeAttribute("user"); } this.actionWrite("OK"); return null; } //检验证书匹配 public String checktype(){ HttpServletRequest req = ServletActionContext.getRequest(); User user = null; String sn=req.getParameter("user_sn"); String userCode = req.getParameter("userCode"); user = userService.getUserByCode(userCode); if(user == null){ this.actionWrite("ERROR"); return null; }else{ String ukeysn=user.getSn(); String[] names=sn.split(","); if(checks(ukeysn,names)){ this.actionWrite("OK"+","+ukeysn); }else{ this.actionWrite("ERROR"+","+"wo"); } } return null; } public String goRealware(){ HttpServletRequest res=ServletActionContext.getRequest(); HttpSession session = res.getSession(); User user = null; String userCode = res.getParameter("userCode"); String sessionID=res.getParameter("sessionID"); user = userService.getUserByCode(userCode); if(orgService.querySessionByCode(userCode,sessionID)>0){ orgService.deleteSessionByCode(userCode); Organization organization = orgService.loadOrgById(user.getBelong_org()); if(organization != null){ long rg_id = organization.getRg_id(); Session userSession = new Session(); userSession.setTop_org(user.getBelong_org()); ElementDTO dto = masterDataService.loadEleValueById(userSession , "REGION", rg_id); session.setAttribute("rg_id", rg_id); session.setAttribute("rg_code", dto.getCode()); session.setAttribute("is_top_region", dto.getParent_id() == 0 ?1+"" : 0+""); userSession.setRgCode(dto.getCode()); user.setRg_code(dto.getCode()); session.setAttribute("user", user); return "Success"; } } return null; } }