2011-01-22 79 views
0

我想爲我的Web應用程序使用身份驗證應用程序跳過用戶的註冊過程。我正在使用http://code.google.com/p/socialauth/ java庫來執行身份驗證。我面臨以下問題在Web應用程序中實現身份驗證

1.我已經創建了像Twitter那樣的身份驗證提供程序的密鑰。但我在我的系統上本地運行此應用程序時遇到問題,因爲我在生成密鑰時需要我的站點地址。

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是異常觸發空指針異常說,供應商就要爲空

ERROR MSG ::

2011年1月23日上午12點26分23秒組織.apache.catalina.core.StandardWrapperValve 調用重度:Servlet.service()用於 servlet的動作拋出異常 顯示java.lang.NullPointerException在 java.util.Properties $ LineReader.readLine(未知 源)處 org.brickred.socialauth.AuthProviderFactory.getInstance(AuthProviderFactory.java:72 java.util.Properties.load0(未知 源)在 java.util.Properties.load(未知 源)) 在 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) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at 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) at 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

AuthProvider provider = AuthProviderFactory.getInstance(id);正在拋出一個NPE,因爲一個屬性文件應該被加載,這不存在: java.util.Properties.load(Unknown Source)

但我不知道,哪一個丟失。我相信你必須包含某種財產文件。

編輯 http://code.google.com/p/socialauth/wiki/StrutsSample 在此示例項目,你CA看到一個名爲oauth_consumer.properties文件 可能是財產文件丟失?

+0

@ckuethbach我試圖在本地運行這個應用程序,但我配置時遇到了問題。在爲twitter生成oauth密鑰時,我給出了返回url作爲網站的地址,例如:www.xyz.com。所以twitter正在返回在那個地址的響應,但我想在本地主機運行。我allready修改我的主機文件指向本地主機www.xyz.com。但仍然得到同樣的問題。 – 2011-01-24 16:23:15

相關問題