簡體   English   中英

為什么LoginContext生產者可以在Java EE / Servlet容器中工作?

[英]Why does a LoginContext producer work in a Java EE/Servlet container?

開源Java EE 6 Petstore項目實現了LoginContext生產者來執行自定義用戶身份驗證。 下面是源代碼。
為什么行得通? 它是特定於應用程序服務器還是標准行為(例如,由某些JSR強制執行)?

 package org.agoncal.application.petstore.security;

import org.agoncal.application.petstore.util.ConfigProperty;

import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import java.io.File;
import java.net.URISyntaxException;

/**
 * @author blep
 *         Date: 16/02/12
 *         Time: 07:28
 */
public class LoginContextProducer {

    // ======================================
    // =             Attributes             =
    // ======================================

    @Inject
    private SimpleCallbackHandler callbackHandler;

    // ======================================
    // =          Business methods          =
    // ======================================

    @Produces
    public LoginContext produceLoginContext(@ConfigProperty("loginConfigFile") String loginConfigFileName,
                                            @ConfigProperty("loginModuleName") String loginModuleName) throws LoginException, URISyntaxException {

        System.setProperty("java.security.auth.login.config", new File(LoginContextProducer.class.getResource(loginConfigFileName).toURI()).getPath());

        try {
            return new LoginContext(loginModuleName, callbackHandler);
        } catch (Exception e) {
            System.out.println("ouch!!!");
            return null;
        }
    }

}

LoginContext是Java身份驗證和授權服務(JAAS)的一部分

LoginContextProducer是CDI“生產者”,它處理產生LoginContext的問題,以便其他類可以注入它。 定制登錄模塊在SimpleLoginModule中實現,並且其使用在配置文件(config.properties)中指定。

如果您願意使用應用程序服務器提供的JAAS的默認實現,則無需編寫自定義登錄模塊或生產者。

看一下項目在這里,POM Maven如果沒有讓任何東西逃脫,這些項目中將使用這些主要技術:

  • EJB(企業JavaBeans)
  • JPA(Java持久性API)
  • JSF(Java服務器界面)
  • Angular(框架)和AJAX
  • Arquillian(用於積分測試)
  • Junit(用於單元測試)

在GlassFish服務器上運行。

J2EE規范6 在這里說,你可以使用相關性,則代碼標准。 如果您的問題是該項目是否可以與J2ee的原始/本地依賴項一起工作,那么我將回答“否”,您將有待編譯的該項目的依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM