Springecurity2.0.4+OpenID完整配置攻略(四)

2014-11-24 01:42:42 · 作者: · 浏览: 2
tion ex)

{

//检查如果是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