{
//检查如果是openid格式的,则生成一个对应的openid用户--必填项先默认生成,用户再自己修改
if(userName.startsWith("http://")||userName.startsWith("https://"))
{
IDBSupportService service = (IDBSupportService)ServiceLocator.getBean("IDBSupportService3");
user = new CommUser();
Long serial = null;
try
{
serial = service.getSerial();
}
catch(Exception ex1)
{
//
}
user.setUserId(serial);
user.setRowId(StringUtil.getUUID());
user.setLoginId(userName);
user.setComId("C0001");
user.setIsPortalMember("Y");//设置为网站会员,这种情况一般是网站会员
user.setUsername(userName);//暂时以用户id作为用户名
user.setUserEmail(serial.toString()+"openjweb.com");//生成一个默认的
user.setPassword("unused");
user.setUserMobile(serial.toString());//生成一个默认的由用户自己修改
user.setIsInUse("Y");
user.setEmpNo(serial.toString());//工号
user.setUpdateUid("system");
user.setCreateUid("system");
user.setCreateDt(StringUtil.getCurrentDateTime());
user.setUpdateDt(user.getCreateDt());
user.setCurrFrameCode("06");
user.setCurrSkinCode("sky");
try
{
service.saveOrUpdate(user);
//然后分配门户网站会员角色
CommUserRole roleEnt = new CommUserRole();
roleEnt.setCreateDt(StringUtil.getCurrentDateTime());
roleEnt.setSerialNo(service.getSerial());
roleEnt.setRoleId(new Long(505715));
roleEnt.setUserId(user.getUserId());
service.saveOrUpdate(roleEnt);
}
catch(Exception ex2)
{
}
}
else
{
throw new UsernameNotFoundException(userName);
}
}
return user;
}
}
4、OpenID登录页
编写一个jsp,例如openid.jsp,下面是此jsp中的一段form内容:
说明:/portal/指的是openjweb的应用路径,如果在webapps根目录可使用/j_spring_openid_security_check ,OpenID输入框的name必须为j_username。
5、申请OpenID 账号
我们可以到谷歌、微软等openID提供商注册一个openID账号,或者在http://www.openid.org.cn上注册一个账号,例如注册一个baozhengw的账号,则完整的OpenID账号则为: http://baozhengw.openid.org.cn/
6、在本地登录OpenID
运行第四步创建的JSP,见下图:
输入:http://baozhengw.openid.org.cn/
然后点登录,系统会跳转到OpenID服务器(系统会根据openid的域名跳转到对应的服务器),见下图(跳转到http://www.openid.org.cn/):
输入baozhengw,和注册时的口令,然后点登录,自动跳转到http://localhost:8088/portal/apps/v22/ui/frame/main.jsp(在配置文件中通过redirect.jsp跳转到后台,因为新增用户自动添加了关联角色,所以能进入后台):
7、其他注意事项
SecurityContextImpl securityContext =(SecurityContextImpl)obj;
Object tmpObj = null;
tmpObj = securityContext.getAuthentication().getPrincipal();
以传统的方式登录,即/j_spring_security_check本地数据库认证的模式,通过getPrincipal()实际返回的是UserDetailsService接口的实现类,在OpenJWeb中是CommUser类,而使用OpenID,则getPrincipal()返回的是OpenID账号,如http://baozhengw.openid.org.cn/ ,所以产品支持OpenID以后,getPrincipal()的返回值类型处理要考虑多种类型。
OpenJWeb 开源组织
QQ 29803446