Tomcat jaas.conf / log4j.properties расположение - PullRequest
0 голосов
/ 29 марта 2012

Я занимаюсь разработкой веб-приложения GWT и при развертывании на Tomcat сталкиваюсь с проблемой.

Проблема довольно проста, но я не знаю, как ее исправить, не сообщая Tomcat, где искать эти файлы.

Когда я развертываю свое приложение прямо на Tomcat, оно ищет файлы в каталоге / bin, поэтому, если я помещаю туда log4j.properties и мой jaas.conf, оно работает как чудо.

Дело в том, что я хотел бы иметь возможность хранить эти файлы в моем веб-приложении.

Как я могу это сделать? Могу ли я что-нибудь добавить в web.xml?

Я пытался поместить оба файла в каталог /WEB-INF/classes, но это не сработало.

Когда я запускаю свои проекты в Eclipse, мой jaas.config должен находиться в папке / war, а мои log4j.properties остаются в папке / src.

Редактировать: Я прочитал this и попробовал его, даже если я не использую log4j для внутренней регистрации в Tomcat, но он тоже не работает.

Я использую Tomcat 7.0

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Относительно jaas.config: Реализуйте ServletContextListener и в методе contextInitialized сделайте следующее (это если jaas.config находится в корне вашей войны, в противном случае просто измените путь):

String jaasConfigPath = event.getServletContext().getRealPath("jaas.config");
System.setProperty("java.security.auth.login.config", jaasConfigPath);
0 голосов
/ 23 апреля 2012

Этот ответ будет соответствовать моей конкретной проблеме, но любой может наверняка адаптировать его, чтобы он работал в своем проекте.

В моем проекте было два сервлета в зависимости от внешних файлов.Чтобы централизовать эти внешние файлы в папке моего веб-приложения, я использовал третий сервлет, чтобы установить расположение файлов.В моем файле GWT web.xml я добавляю StartUpServlet и задаю его загрузку сначала моим контейнером сервлетов (Tomcat).Вот мой web.xml:

        <?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <servlet>
        <servlet-name>StartUpServlet</servlet-name>
        <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.StartUpServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>VlpControllerService</servlet-name>
        <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.VlpControllerServiceImpl</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>UserAccessService</servlet-name>
        <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.UserAccessServiceImpl</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>EventService</servlet-name>
        <servlet-class>de.novanic.eventservice.service.EventServiceImpl</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>EventService</servlet-name>
        <url-pattern>/VirtualLabPortal/gwteventservice</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>VlpControllerService</servlet-name>
        <url-pattern>/VirtualLabPortal/VlpController</url-pattern>

    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>UserAccessService</servlet-name>
        <url-pattern>/VirtualLabPortal/UserAccess</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>StartUpServlet</servlet-name>
        <url-pattern>/VirtualLabPortal/StartUpServlet</url-pattern>
    </servlet-mapping>


    <!-- Default page to serve -->
    <welcome-file-list>
        <welcome-file>VirtualLabPortal.html</welcome-file>
    </welcome-file-list>
</web-app>

В этом StartUpServlet я установил расположение файлов следующим образом: (Возможно, есть лучший способ сделать это, но это сработало):

public class StartUpServlet extends RemoteServiceServlet {
    /**
     * This Servlet is used to set configuration file locations.
     */
    private static final long serialVersionUID = 6459940076859400546L;
    private final String CONFIG_FOLDER = "config";
    private final String LOG_FOLDER = "logs";

    public void init() {
        // Check the current of to have the good file separator for file
        // browsing
        String os = System.getProperty("os.name").toLowerCase();
        // windows
        String fileSeparator;
        if (os.indexOf("win") >= 0) {
            fileSeparator = "\\";
        } else {
            fileSeparator = "/";
        }

        String jaasConfigPath = super.getServletContext().getRealPath(
                CONFIG_FOLDER + fileSeparator + "JaasConfig.conf");
        String jaasConfigName = "JaasConfig";
        String configFile = super.getServletContext().getRealPath(
                CONFIG_FOLDER + fileSeparator + "config.properties");

        String log4j = getServletContext().getRealPath(
                CONFIG_FOLDER + fileSeparator + "log4j.properties");
        String logFile = getServletContext().getRealPath(
                LOG_FOLDER + fileSeparator + "vlplog.log");

        // Order is important here as the log4j properties file use the system
        // property : "logFile"
        System.setProperty("logFile", logFile);
        PropertyConfigurator.configure(log4j);
        System.setProperty("jaasConfigName", jaasConfigName);
        System.setProperty("jaasConfigPath", jaasConfigPath);
        System.setProperty("configFile", configFile);
    }
}

По сути, я получаю реальный путь ServletContext, поэтому он дает мне в Tomcat следующий путь: ${CATALINA_HOME}/webapps/<myapps>

Затем я использую его для установки местоположений файлов: config / config.properties,config / log4j.properties и мой config / JaasConfig.

После того, как они установлены, я могу использовать их в других моих сервлетах, как это System.getProperty(KEY);

Спасибо @Aviram за помощь в установкерасположение JaasConfig.

...