不过没和你唠嗑
  • UID64
  • 粉丝
  • 关注
  • 发帖数
阅读:8104回复:2

平台登录的时候session在何时保存用户信息

楼主#
更多 发布于:2016-04-01 16:03
   核格平台是在什么时候将用户信息保存到session里面的?即登录成功之后在哪里将用户信息放到session里面?还有注销的时候是在哪里注销的session?解答希望能具体到代码里面
[不过没和你唠嗑于2016-04-05 15:33编辑了帖子]
best_for_ys
  • UID89
  • 粉丝
  • 关注
  • 发帖数
沙发#
发布于: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里面的东西,我们是在这个框架的基础上做一些操作。
best_for_ys
  • UID89
  • 粉丝
  • 关注
  • 发帖数
板凳#
发布于:2016-04-06 09:42
在 currUser中放入数据
currUser.getInfo().put("mmm", "nnn");
在页面上获取我们放入的数据

<div>${currUser.info.mmm}~222222</div>
游客

返回顶部