google 账户网站登录(openid)

LoginAction.java
OpenIdManager manager = new OpenIdManager();
			manager.setReturnTo("http://61.121.243.211:8080/demo1/responseOpenid");
			manager.setRealm("http://61.121.243.211:8080/demo1/");
			manager.setTimeOut(10000);
			Endpoint endpoint = manager.lookupEndpoint("Google");
			Association association = manager.lookupAssociation(endpoint);
			request.getSession().setAttribute("openid_association", association);
			request.getSession().setAttribute("OpenIdManager", manager);
			String url = manager.getAuthenticationUrl(endpoint, association);
			response.sendRedirect(url);

ResponseOpenidServlet.java
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String url=req.getRequestURL().toString()+"?"+req.getQueryString();	
		Association association =(Association)req.getSession().getAttribute("openid_association");
		OpenIdManager manager = (OpenIdManager)req.getSession().getAttribute("OpenIdManager");
		if(association!=null&&manager!=null){
			HttpServletRequest request = createRequest(url);
			Authentication authentication = manager.getAuthentication(request, association.getRawMacKey());
			String id=authentication.getIdentity();
			String email=authentication.getEmail();
			if(id!=null){
				LoginUser loginUser=new LoginUser();
				loginUser.setUsrno(email);
				req.getSession().setAttribute("loginUser", "loginUser");
				resp.sendRedirect("index.jsp"); //首页
			}else{
				resp.sendRedirect("login.jsp"); 
			}
		}else{
			resp.sendRedirect("login.jsp"); 
		}
	}
	
	HttpServletRequest createRequest(String url) throws UnsupportedEncodingException {
		int pos = url.indexOf('?');
		if (pos == (-1))
			throw new IllegalArgumentException("Bad url.");
		String query = url.substring(pos + 1);
		String[] params = query.split("[\\&]+");
		final Map<String, String> map = new HashMap<String, String>();
		for (String param : params) {
			pos = param.indexOf('=');
			if (pos == (-1))
				throw new IllegalArgumentException("Bad url.");
			String key = param.substring(0, pos);
			String value = param.substring(pos + 1);
			map.put(key, URLDecoder.decode(value, "UTF-8"));
		}
		return (HttpServletRequest) Proxy.newProxyInstance(LoginAction.class.getClassLoader(), new Class[] { HttpServletRequest.class }, new InvocationHandler() {
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				if (method.getName().equals("getParameter"))
					return map.get((String) args[0]);
				throw new UnsupportedOperationException(method.getName());
			}
		});
	}

web.xml
<servlet>
	    <servlet-name>responseOpenid</servlet-name>
    	<servlet-class>com.action.ResponseOpenidServlet</servlet-class>
	 </servlet>

	 <servlet-mapping>
	    <servlet-name>responseOpenid</servlet-name>
    	<url-pattern>/responseOpenid</url-pattern>
     </servlet-mapping>
<servlet>
	    <servlet-name>login</servlet-name>
    	<servlet-class>com.action.LoginAction</servlet-class>
		<init-param> 
			<param-name>forward</param-name>
			<param-value>index.jsp</param-value>
		</init-param>
		<init-param> 
			<param-name>errorURL</param-name>
			<param-value>login.jsp</param-value>
		</init-param>
	 </servlet>
	 <servlet-mapping>
		<servlet-name>login</servlet-name>
    	<url-pattern>/login</url-pattern>
     </servlet-mapping>

ops.properties
Google = https://www.google.com/accounts/o8/id

你可能感兴趣的:(java,Web,jsp,xml,Google)