在Web应用程序中实现auth

时间:2011-01-22 19:34:52

标签: java configuration oauth openid

我想在我的网络应用程序中使用auth应用程序来跳过用户的注册过程。我正在使用http://code.google.com/p/socialauth/ java库来实现auth。我正面临以下问题

1.我已经与twitter这样的auth提供商创建了密钥。但我在我的系统上本地运行此应用程序时遇到问题,因为我在生成密钥时需要提供我的站点地址。

2.我无法配置我的主机文件,以便在生成密钥时使用我提供的地址属性。

这是执行的代码。

package com.auth.actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.RequestUtils;
import org.brickred.socialauth.AuthProvider;
import org.brickred.socialauth.AuthProviderFactory;

import com.auth.form.AuthForm;

public class SocialAuthenticationAction extends Action {

        final Log LOG = LogFactory.getLog(SocialAuthenticationAction.class);

        @Override
        public ActionForward execute(final ActionMapping mapping,
                        final ActionForm form, final HttpServletRequest request,
                        final HttpServletResponse response) throws Exception {

                AuthForm authForm = (AuthForm) form;
                String id = authForm.getId();
                System.out.println("in authentieavtaonsdfsaf");
                AuthProvider provider = AuthProviderFactory.getInstance(id);
                String returnToUrl = RequestUtils.absoluteURL(request,"/socialAuthSuccessAction.do").toString();
                authForm.setProvider(provider);
                String url = provider.getLoginRedirectURL(returnToUrl);
                LOG.info("Redirecting to: " + url);
                if (url != null) {
                        ActionForward fwd = new ActionForward("openAuthUrl", url, true);
                        return fwd;
                }
                return mapping.findForward("failure");
        }
}

这里第23行显示空指针异常,表示提供程序为空

错误MSG ::

  

2011年1月23日上午12:26:23 org.apache.catalina.core.StandardWrapperValve   调用SEVERE:Servlet.service()   servlet动作抛出异常   java.lang.NullPointerException at   java.util.Properties $ LineReader.readLine(未知   来源)at   java.util.Properties.load0(未知   来源)at   java.util.Properties.load(未知   来源)at   org.brickred.socialauth.AuthProviderFactory.getInstance(AuthProviderFactory.java:72)     在   com.auth.actions.SocialAuthenticationAction.execute(SocialAuthenticationAction.java:31)     在   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)     在   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)     在   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)     在   org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)     在   javax.servlet.http.HttpServlet.service(HttpServlet.java:707)     在   javax.servlet.http.HttpServlet.service(HttpServlet.java:820)     在   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)     在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)     在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)     在   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)     在   org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)     在   org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)     在java.lang.Thread.run(未知   源)

1 个答案:

答案 0 :(得分:1)

AuthProvider provider = AuthProviderFactory.getInstance(id);正在抛出一个NPE,因为应该加载一个属性文件,该文件不存在: java.util.Properties.load(Unknown Source)

但我不知道,哪一个缺失。我相信你必须包含某种属性文件。

修改 http://code.google.com/p/socialauth/wiki/StrutsSample 在此示例项目中,您可以看到名为oauth_consumer.properties的文件 可能是缺少属性文件?