【问题标题】:how to access file in root server with spring security如何使用spring security访问根服务器中的文件
【发布时间】:2017-02-28 12:52:59
【问题描述】:

我正在使用 grails 3.1.1 我已经使用 tomcat 8 部署了我的 war 文件,并将我的所有图像文件存储到 /app/Item/

这是我服务器中文件夹的结构。

/app/Item/<all my image>
/home
/root/apache-tomcat-8/
     /apache-tomcat-8/webapps
     /apache-tomcat-8/webapps/ROOT.war
     /apache-tomcat-8/bin
     /apache-tomcat-8/logs
     /apache-tomcat-8/work
     /apache-tomcat-8/temp
     /apache-tomcat-8/conf

现在我使用symlink 访问/app/Item 所以我在/apache-tomcat-8/webapps/images 中创建了一个符号链接,名称为images 所以当我访问localhost:8080/images/100.JPG 时,它将访问/app/Item/100.JPG

但是如果我重新运行我的 tomcat,我会得到一些错误日志,因为我使用 symlink 创建的文件夹 images 不在我的 grails 项目中。 像这样..

28-Feb-2017 12:43:44.962 WARNING [localhost-startStop-2] org.apache.naming.NamingContext.lookup Unexpected exception resolving reference
 java.sql.SQLException: Unable to load class: com.mysql.jdbc.Driver from ClassLoader:java.net.URLClassLoader@1fb3ebeb;ClassLoader:ParallelWebappClassLoader
  context: gambarku
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@1fb3ebeb

    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:283)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:718)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:650)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:468)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143)

现在我想知道如何在没有 symlink 的情况下通过我的 grails 应用程序访问我的文件夹 /app/Item/?

我尝试在没有symlink 或images 的文件夹(快捷方式)的情况下进行部署

    [root@li1447-147 bin]# cd ..
[root@li1447-147 apache-tomcat-8.5.8]# cd we
-bash: cd: we: No such file or directory
[root@li1447-147 apache-tomcat-8.5.8]# cd webapps/
[root@li1447-147 webapps]# rm -rf *
[root@li1447-147 webapps]# clear
[root@li1447-147 webapps]# cd ..
[root@li1447-147 apache-tomcat-8.5.8]# cd bin/
[root@li1447-147 bin]# ./startup.sh
Using CATALINA_BASE:   /root/apache-tomcat-8.5.8
Using CATALINA_HOME:   /root/apache-tomcat-8.5.8
Using CATALINA_TMPDIR: /root/apache-tomcat-8.5.8/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_112
Using CLASSPATH:       /root/apache-tomcat-8.5.8/bin/bootstrap.jar:/root/apache-    tomcat-8.5.8/bin/tomcat-juli.jar
Tomcat started.
[root@li1447-147 bin]# tail -f ../logs/catalina.out
28-Feb-2017 16:13:06.353 INFO [main] org.apache.coyote.AbstractProtocol.init Ini    tializing ProtocolHandler ["http-nio-80"]
28-Feb-2017 16:13:06.368 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.    getSharedSelector Using a shared selector for servlet write/read
28-Feb-2017 16:13:06.370 INFO [main] org.apache.coyote.AbstractProtocol.init Ini    tializing ProtocolHandler ["https-jsse-nio-443"]
28-Feb-2017 16:13:06.613 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.    getSharedSelector Using a shared selector for servlet write/read
28-Feb-2017 16:13:06.613 INFO [main] org.apache.coyote.AbstractProtocol.init Ini    tializing ProtocolHandler ["ajp-nio-8009"]
28-Feb-2017 16:13:06.615 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.    getSharedSelector Using a shared selector for servlet write/read
28-Feb-2017 16:13:06.615 INFO [main] org.apache.catalina.startup.Catalina.load I    nitialization processed in 796 ms
28-Feb-2017 16:13:06.637 INFO [main] org.apache.catalina.core.StandardService.st    artInternal Starting service Catalina
28-Feb-2017 16:13:06.637 INFO [main] org.apache.catalina.core.StandardEngine.sta    rtInternal Starting Servlet Engine: Apache Tomcat/8.5.8
28-Feb-2017 16:13:06.657 INFO [localhost-startStop-1] org.apache.catalina.startu    p.HostConfig.deployWAR Deploying web application archive /root/apache-tomcat-8.5    .8/webapps/ROOT.war
28-Feb-2017 16:13:13.193 INFO [localhost-startStop-1] org.apache.jasper.servlet.    TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs.     Enable debug logging for this logger for a complete list of JARs that were scan    ned but no TLDs were found in them. Skipping unneeded JARs during scanning can i    mprove startup time and JSP compilation time.

Configuring Spring Security Core ...
... finished configuring Spring Security Core

28-Feb-2017 16:13:49.628 INFO [localhost-startStop-1] org.apache.catalina.startu    p.HostConfig.deployWAR Deployment of web application archive /root/apache-tomcat    -8.5.8/webapps/ROOT.war has finished in 42,968 ms
28-Feb-2017 16:13:49.632 INFO [main] org.apache.coyote.AbstractProtocol.start St    arting ProtocolHandler [http-nio-80]
28-Feb-2017 16:13:49.638 INFO [main] org.apache.coyote.AbstractProtocol.start St    arting ProtocolHandler [https-jsse-nio-443]
28-Feb-2017 16:13:49.639 INFO [main] org.apache.coyote.AbstractProtocol.start St    arting ProtocolHandler [ajp-nio-8009]
28-Feb-2017 16:13:49.640 INFO [main] org.apache.catalina.startup.Catalina.start     Server startup in 43024 ms

-----------------这是给symlink

然后我尝试read this 并将此代码添加到我的server.xml

&lt;Context docBase="/app/Item" path="/gambarku" /&gt;

然后再次启动.sh。

我得到了这个日志。

28-Feb-2017 17:00:49.701 WARNING [localhost-startStop-1] org.apache.catalina.core.NamingContextListener.addResource Failed to register in JMX: javax.naming.NamingException: Unable to load class: com.mysql.jdbc.Driver from ClassLoader:java.net.URLClassLoader@1fb3ebeb;ClassLoader:ParallelWebappClassLoader
  context: gambarku
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@1fb3ebeb

28-Feb-2017 17:00:49.772 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /root/apache-tomcat-8.5.8/webapps/ROOT.war
28-Feb-2017 17:00:56.238 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

当我尝试使用 symlink 时,此日志是相同的。

我试图找到一些文档,我已经签入文件夹 WEB-INF/lib/mysql-connector-java-5.1.20.jar 和 build.gradle 与 runtime 'mysql:mysql-connector-java:5.1.20'

【问题讨论】:

标签: java spring tomcat grails


【解决方案1】:
def image = new File('/app/Item/image1.jpg')

【讨论】:

    【解决方案2】:

    这是一个长镜头,但可能会解决您的问题,它与您最初的配置非常相似,只需添加 allowLinking="true":

    • 在 /app/Item 和 /apache-tomcat-8/w​​ebapps/images 之间创建符号链接
    • 将此添加到您的配置中

            <Context docBase="/app/Item" path="/images" allowLinking="true"/>
      

    【讨论】:

    • 我必须重新创建符号链接吗?
    • 我仍然得到相同的日志.. 01-Mar-2017 03:31:55.091 警告 [localhost-startStop-1] org.apache.catalina.core.NamingContextListener.addResource 无法在 JMX 中注册:javax.naming.NamingException:无法从ClassLoader加载类:com.mysql.jdbc.Driver:java.net.URLClassLoader@1fb3ebeb;ClassLoader:ParallelWebappClassLoader上下文:gambarku委托:false ---------->父类加载器:java.net.URLClassLoader@1fb3ebeb
    • 为什么说 gambarku,不应该说 image?
    • 是的,我正在更改文件夹名称,就像这样Context docBase="/app/Item" path="/gambarku" allowLinking="true"/&gt;
    • 可以改成图片吗?图片文件夹是否存在于 grails 项目的 webapps 文件夹中?
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 2013-01-17
    • 2014-09-05
    • 2011-03-28
    • 2015-10-21
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多