阅读:8109回复:2
平台登录的时候session在何时保存用户信息
核格平台是在什么时候将用户信息保存到session里面的?即登录成功之后在哪里将用户信息放到session里面?还有注销的时候是在哪里注销的session?解答希望能具体到代码里面
[不过没和你唠嗑于2016-04-05 15:33编辑了帖子]
|
|
沙发#
发布于:2016-04-06 09:42
在 currUser中放入数据
currUser.getInfo().put("mmm", "nnn"); 在页面上获取我们放入的数据 <div>${currUser.info.mmm}~222222</div> |
|
板凳#
发布于:2016-04-06 00:45
1.核格平台是在什么时候将用户信息保存到session里面的?
在登陆的时候。 2.登录成功之后在哪里将用户信息放到session里面? 点击登陆按钮后,平台会通过服务装配调到后台,将用户信息添加到session,并将当前用户返回。 3.还有注销的时候是在哪里注销的session? 注销的底层我还不知道,但是平台的注销是通过SYSTEM.logout()方法,我觉得和登陆是一样的,只是平台封装了一层。 页面点击登陆按钮: <div class="buttonBox"> <h:commandButton id="login" class="login" action="#{identity.login}" /> </div>identity是org.jboss.seam.security里面的类,这里面的东西太深,不需要研究,只需会用。 页面上需要引入 xmlns:s="http://jboss.com/products/seam/taglib" 服务装配: <?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://www.sunsheen.cn/jfids/system" name="LoginComposite"> <component name="LoginComponent"> <implementation.java class="com.sunsheen.jfids.dsi.sysman.security.login.LoginImpl"/> <reference name="dao" target="DaoComponent" /> </component> </composite>通过服务装配会调到java类 com.sunsheen.jfids.dsi.sysman.security.login.LoginImpl(这是我们自己定义的类) LoginImpl源码: package com.sunsheen.jfids.dsi.sysman.security.login; import java.util.List; import java.util.Map; import javax.faces.context.FacesContext; import org.hibernate.Query; import org.hibernate.transform.Transformers; import org.jboss.seam.security.Identity; import org.jboss.seam.web.IdentityRequestWrapper; import org.osoa.sca.annotations.Reference; import com.sunsheen.jfids.dsi.sysman.department.Ts_department; import com.sunsheen.jfids.dsi.sysman.security.login.authgroup.Role; import com.sunsheen.jfids.system.base.composite.dao.IDao; import com.sunsheen.jfids.system.base.composite.data.query.QueryParameterImpl; import com.sunsheen.jfids.system.security.login.ILogin; import com.sunsheen.jfids.system.sysman.ISysUser; import com.sunsheen.jfids.util.Debug; public class LoginImpl implements ILogin { IDao dao; @Reference public void setDao(IDao dao) { this.dao = dao; } @Override public ISysUser doLogin(Identity identity, Map data) { // ISysUser currUser = (ISysUser) // this.dao.getHibernateSession().createQuery( // "select u from Ts_user u where u.id=#{identity.username} and // u.password=#{identity.password}") // .uniqueResult(); // Debug.info("参数值:" // + FacesContext.getCurrentInstance().getExternalContext() // .getRequestParameterMap()); SysUser currUser = new SysUser(); if (FacesContext.getCurrentInstance() != null) { currUser.getInfo().put( "request", ((IdentityRequestWrapper) FacesContext.getCurrentInstance() .getExternalContext().getRequest()).getRequest()); currUser.getInfo().put( "ip", ((IdentityRequestWrapper) FacesContext.getCurrentInstance() .getExternalContext().getRequest()).getRequest() .getRemoteAddr()); } Query query = dao .getSession() .createSQLQuery( "select * from SV_USERDEPART where account=:account and password=:password"); data.put("account", identity.getCredentials().getUsername()); MD5 m = new MD5(); data.put("password", m.getMD5ofStr(identity.getCredentials().getPassword())); QueryParameterImpl qp = new QueryParameterImpl(); query = qp.initParameter(query, data); query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List userDataList = (List) query.list();// 涉及到多部门,就会有多条记录 if (userDataList.size() > 0) { for (int i = 0; i < userDataList.size(); i++) { Map userData = (Map) userDataList.get(i); if (i == 0) { currUser.setAccount((String) data.get("USERNAME")); currUser.setId((String) userData.get("ID")); currUser.setMemo((String) userData.get("MEMO")); currUser.setEmpid((String) userData.get("EMPID")); currUser.setUsername((String) userData.get("USERNAME")); currUser.setSexname((String) userData.get("SEXNAME")); currUser.setAccount((String) userData.get("ACCOUNT")); currUser.getInfo().put("SKIN", userData.get("SKIN")); data.clear(); data.put("id", currUser.getId()); Query roleQuery = dao.getSession().createSQLQuery( "select * from SV_USERROLE where userid=:id"); roleQuery = qp.initParameter(roleQuery, data); roleQuery .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List<Map<String, String>> roleList = roleQuery.list(); if (roleList != null) { for (int j = 0; j < roleList.size(); j++) { String roleid = roleList.get(j).get("ROLEID"); String text = roleList.get(j).get("TEXT"); identity.addRole(roleid); currUser.getRole().add(new Role(roleid, text)); } } } Ts_department depart = new Ts_department(); depart.setId((String) userData.get("DEPARTID")); depart.setText((String) userData.get("DEPARTNAME")); currUser.getDepart().add(depart); } // identity.addRole("role1"); // currUser.getRole().add(new Role("role1", "ROLE1")); // identity.addRole("role2"); // currUser.getRole().add(new Role("role2", "ROLE2")); return currUser; } return null; } } 其中的 currUser.setAccount((String) data.get("USERNAME")); currUser.setId((String) userData.get("ID")); currUser.setMemo((String) userData.get("MEMO")); currUser.setEmpid((String) userData.get("EMPID")); currUser.setUsername((String) userData.get("USERNAME")); currUser.setSexname((String) userData.get("SEXNAME")); currUser.setAccount((String) userData.get("ACCOUNT")); currUser.getInfo().put("SKIN", userData.get("SKIN"));就是设置用户信息到session.一般我们要自己写的话,只需要修改这段代码。 我们登陆注销的最底层是用的Jboss seam里面的东西,我们是在这个框架的基础上做一些操作。 |
|