gpt4 book ai didi

java - 重写 spring-security 重定向 URL

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:37 31 4
gpt4 key购买 nike

我正在尝试让 Tuckey UrlRewriteFilter 整理我的网络应用程序的 URL。我遇到的一个问题是,当 spring-security 注意到匿名用户正在尝试访问 protected 资源时,它会重定向到一个包含 servlet 路径的 URL。

我想要的是,例如:

> GET http://localhost:8080/my-context/protected-resource
< Location: http://localhost:8080/my-context/login

我目前得到的是:

> GET http://localhost:8080/my-context/protected-resource
< Location: http://localhost:8080/my-context/-/login

目前我找到的相关文件:

DefaultRedirectStrategy,执行相关的实际重定向:http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/DefaultRedirectStrategy.html .它有一个 contextRelative 属性,这很诱人,但我不认为会削减它,如果我能找到一种配置它的方法的话。

帮助我走到这一步的博客文章:http://nonrepeatable.blogspot.com/2009/11/using-spring-security-with-tuckey.html

我想知道的是:

  1. 我可以/应该说服 Tuckey 重写 Location header 。 在这里似乎没有任何帮助。
  2. 我可以/应该以某种方式调整 SS 配置以发出重写的 URL。我认为这不是很整洁,因为如果禁用重写,它会中断。

web.xml 看起来像

<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>LogLevel</param-name>
<param-value>log4j</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

<servlet>
<servlet-name>my-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>psms</servlet-name>
<url-pattern>/-/*</url-pattern>
</servlet-mapping>

urlrewrite.xml 看起来像:

<urlrewrite>
<rule>
<from>^/(.*)$</from>
<to>/-/$1</to>
</rule>
</urlrewrite>

applicationContent-security.xml 看起来像:

<http auto-config="true">
<!-- allow GET requests to /login without authentication -->
<intercept-url pattern="/-/login" method="GET" filters="none"/>

<intercept-url pattern="/-/admin/**" access="ROLE_ADMIN"/>
<intercept-url pattern="/-/**" access="ROLE_USER"/>

<form-login login-page="/-/login"
login-processing-url="/-/login.do"
authentication-failure-url="/-/login?login_error"
default-target-url="/-/index"
always-use-default-target="true"/>

<logout logout-url="/-/logout"
logout-success-url="/-/login"/>

<access-denied-handler error-page="/-/access-denied"/>
</http>

最佳答案

我去年为我们的项目调查了这个问题,当时的问题是 Tucky 没有与 response.encodeRedirectUrl() 合作重写重定向 URL。我联系了他们,但我没有跟进此事。

我的解决方案是允许杂乱的 URL 返回给客户端,然后使用 Tucky 重定向规则(第二次重定向)清理它。

因此,添加另一个规则来匹配您来自安全重定向的丑陋 URL,并将您自己的重定向发送到干净的 URL:

<rule>
<from>^/whatever/ugly.*$</from>
<to type="redirect">/login</to>
</rule>

是的,它涉及两个重定向,但客户端永远不会看到它......这可能就是重点。

关于java - 重写 spring-security 重定向 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762453/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com