openID是一个分散式身份识别协议,在其基础上实现了网上身份认证系统。可以将您的系统使用openID来作为用户登录,让你的程序支持opendID。我使用的是http://www.openid.org.cn/ 作为openID提供商,使用openid4java库编写openID依赖方。
以下根据openid4java文档写的一个demo
发起openID请求的action
//yuyong 2012-2-10
public class OpenIDLoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private ISampleConsumerManager sampleConsumerManager;
private AuthRequest authReq;
private String openID=null;
ActionContext context = ActionContext.getContext();
HttpServletRequest request = null;
HttpServletResponse response = null;
Map<String,Object>pm=null;
String actionURL;
public String execute()throws Exception{
if(openID!=null&&openID.startsWith("http://")){
openID=openID.replaceAll("http://", "");
}
String returnToUrl="http://localhost:8181/SSO/firstPageAction.action";
ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
authReq=sampleConsumerManager.authRequest(openID, returnToUrl,request,response, request.getSession());
Map<String,Object>pm=authReq.getParameterMap();
this.pm=pm;
this.actionURL=authReq.getOPEndpoint();
request.setAttribute("pm", pm);
request.setAttribute("actionURL", authReq.getOPEndpoint());
return SUCCESS;
}
}
将用户的OpenID帐户和返回url封装成openID请求 AuthRequest
//yuyong 2012-2-10
public class SampleConsumerManager implements ISampleConsumerManager{
public ConsumerManager manager;
public SampleConsumerManager()throws ConsumerException{
manager=new ConsumerManager();
manager.setAssociations(new InMemoryConsumerAssociationStore());
manager.setNonceVerifier(new InMemoryNonceVerifier(5000));
}
//将openID,返回url封装为一个openID请求
public AuthRequest authRequest(String userSuppliedString,
String returnToUrl, HttpServletRequest httpReq,
HttpServletResponse httpResp,HttpSession session)
throws IOException {
try {
List discoveries=manager.discover(userSuppliedString);
DiscoveryInformation discovered=manager.associate(discoveries);
session.setAttribute("discovered", discovered);
AuthRequest authReq=manager.authenticate(discovered, returnToUrl);
httpResp.sendRedirect(authReq.getDestinationUrl(true));
return authReq;
} catch (DiscoveryException e) {
e.printStackTrace();
} catch (MessageException e) {
e.printStackTrace();
} catch (ConsumerException e) {
e.printStackTrace();
}
return null;
}
//验证openID登录验证的返回
public Identifier verifyResponse(HttpServletRequest httpReq,
HttpSession session) throws IOException {
ParameterList openidResp=new ParameterList(httpReq.getParameterMap());
DiscoveryInformation discovered=(DiscoveryInformation) session.getAttribute("discovered");
StringBuffer receivingURL=httpReq.getRequestURL();
String queryString=httpReq.getQueryString();
if(queryString!=null&&queryString.length()>0)
receivingURL.append("?").append(httpReq.getQueryString());
try {
VerificationResult verification=manager.verify(receivingURL.toString(), openidResp, discovered);
Identifier verified=verification.getVerifiedId();
return verified;
} catch (MessageException e) {
e.printStackTrace();
} catch (DiscoveryException e) {
e.printStackTrace();
} catch (AssociationException e) {
e.printStackTrace();
}
return null;
}
}
应用程序验证openID请求验证的返回
//yuyong 2012-2-10
public class FirstPageAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private ISampleConsumerManager sampleConsumerManager=null;
private HttpServletRequest request=null;
private HttpServletResponse response=null;
private HttpSession session=null;
public String execute()throws Exception{
if(sampleConsumerManager.verifyResponse(request, session)!=null)
return SUCCESS;
else
return ERROR;
}
}
struts.xml
<action name="openIDLoginAction" class="openIDLoginAction">
<param name="openID">
http://yuyongwuhu.openid.org.cn/
</param>
<result name="success">/continue.jsp</result>
</action>
<action name="firstPageAction" class="FirstPageAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
continue.jsp 提交封装后的openID请求到openID OP端
<body onload="document.forms['openid-form-redirection'].submit();">
<form id="openid-form-redirection" action="<s:property value="#request.actionURL"/>">
<s:iterator value="#request.pm">
<input type="hidden" name="<s:property value="key"/>" value="<s:property value="value"/>" />
</s:iterator>
</form>
</body>
只是为了实现第一个demo,只是为了看到效果,所以代码组织的不太规范。
大致过程是 SampleConsumerManager 通过Discovery进程,根据用户OpenID的帐户
定位到相应的openID提供商,然后将相应参数提交到openID op端的action。
op端提供一个页面输入密码。验证成功后,返回到 returnToUrl ,应用中,在
returnToUrl中的action验证op的response。
分享到:
相关推荐
藏区特产销售平台--论文.zip
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
该单片机项目可作为课程设计和期末大作业或者毕设,项目完整,有原理图和代码,需要的自行下载即可!
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载