java - 在 Web 应用程序中实现身份验证

标签 java configuration oauth openid

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

1.我已经与 Twitter 等身份验证提供商创建了 key 。但我在系统上本地运行此应用程序时遇到问题,因为我在生成 key 时提供了所需的网站地址。

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

这是执行的代码片段。

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 行,抛出空指针异常,表示提供程序为 null

错误信息::

Jan 23, 2011 12:26:23 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet action threw exception java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Unknown Source) at java.util.Properties.load0(Unknown Source) at java.util.Properties.load(Unknown Source) at org.brickred.socialauth.AuthProviderFactory.getInstance(AuthProviderFactory.java:72) at com.auth.actions.SocialAuthenticationAction.execute(SocialAuthenticationAction.java:31) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at 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) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)

最佳答案

AuthProvider provider = AuthProviderFactory.getInstance(id); 抛出 NPE,因为应该加载属性文件,但该文件不存在: java.util.Properties.load(来源未知)

但我不知道,缺少哪一个。我确信您必须包含某种属性文件。

编辑 http://code.google.com/p/socialauth/wiki/StrutsSample 在此示例项目中,您可以看到一个名为 oauth_consumer.properties 的文件 可能是属性文件丢失了?

关于java - 在 Web 应用程序中实现身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770084/

相关文章:

java.rmi.MarshalException

java - Java 获得焦点和失去焦点

api - 将 oAuth 2.0 客户端凭据和资源所有者密码凭据授予 API 类型相结合?

c# - 在 WinRT Windows 应用商店应用程序中通过 OAuth 进行身份验证的最佳方式

azure - 通配符 SSL 映射多个 Azure 应用服务应用程序

authentication - Facebook OAuth "An Error Has Occurred"

java - Trove Collection 如何比标准 Java Collection 更高效?

JAVA:parseInt 问题

spring-boot - 字符串列表的 Spring Boot YAML 配置

.net - 使 WCF 更易于配置