带有Spring Security的Apache / mod_jk

时间:2012-07-20 12:59:17

标签: java url-rewriting spring-security apache2 mod-jk

在使用mod_jk和Spring Security工作以前的项目时,我遇到了一些问题,但我现在似乎无法使其工作。

当我的网络应用程序位于http://hostname/myapp时,我有一个使用JBoss的相当典型的情况(但可以很容易就是Tomcat),我希望这些内容在浏览器中隐藏,以便所有访问都是{ {1}}

在Apache中,我有一些规则: -

http://hostname

我已经剥离了我的Spring Security,尽可能简单:

# Remove double "myapp" in url
RewriteRule ^/myapp/(.*) /$1

# Check to see if content can be served locally - rewrite back if not
RewriteCond /dir/to/static/content -f
RewriteRule ^/(.*) /myapp/$1 [PT]

JkMount /myapp/* loadbalancer

在我的web.xml中

<security:http auto-config="true">
<security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>

问题是如果没有Spring安全性(即删除springSecurityFilterChain),这样可以正常工作,但是如果包含它,我会遇到像

这样的问题
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
 </filter-mapping>

当我尝试登录时。

我的问题是:

  1. 这是一个需要配置的Spring Security问题,还是我的Apache不正确?
  2. 有没有人有可以与我分享的工作配置!
  3. 我已经在这几个小时内苦苦挣扎,阅读了很多帖子,但我还没有设法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,以便将来可能帮助其他人。我不得不切换到mod_proxy而不是mod_jk。

我的设置看起来像这样

<Proxy>
   Order deny,allow
   Allow from all
</Proxy>

RewriteCond /dir/to/static/content/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*) ajp://127.0.0.1:8009/myapp/$1 [P]
ProxyPassReverse /  http://myurl/myapp/
ProxyPassReverseCookiePath /myapp /

我的春季安全档案

<security:http auto-config="false" use-expressions="true" disable-url-rewriting="true">
   <security:intercept-url pattern="/app/login" access="permitAll" />
   <security:intercept-url pattern="/app/**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />
   <security:form-login
    login-page="/app/login"
    authentication-failure-url="/app/login?f=1"
    default-target-url="/app/map"/>
   <security:logout logout-url="/app/logout"/>
 </security:http>

我认为密钥是ProxyPassReverseCookiePath语句。