【问题标题】:How to prevent Spring from adding base url again and again (Spring Security)如何防止Spring一次又一次地添加base url(Spring Security)
【发布时间】:2015-12-03 08:40:16
【问题描述】:

我使用 Spring、Hibernate、tiles、Spring security 创建了一个应用程序。

有些页面无需登录即可访问。有些页面只能在登录后访问(即角色为“ROLE_USER”的用户)。 “帐户设置”是登录后可以访问的页面。当我在未登录的情况下点击帐户设置网址时。它直接带我进入登录屏幕。登录后,它会将我重定向到帐户设置页面。这是预期的行为。但我面临的问题是当我第二次尝试点击“帐户设置”链接时。它在 url 前面添加了一个额外的 /user ,我收到 404 错误。如何防止spring一次又一次地为用户添加前缀。即使我尝试了“重定向”,但它没有帮助。非常感谢您的帮助。

网址

http://localhost:8080/myapp/user/accountSettings(第一次) http://localhost:8080/myapp/user/user/accountSettings(第二次)

spring-security.xml

<http auto-config="true" use-expressions="true">
<intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" />
.....

链接

&lta href="user/accountSettings"&gt账户设置&lt/a&gt

控制器类

@RequestMapping("/user/accountSettings")
public ModelAndView accountSettings() {
    ModelAndView model = new ModelAndView("accountSettings");
    return model;
}

tiles.xml

<definition name="accountSettings" extends="base.definition">
    <put-attribute name="title" value="Account Settings" />
    <put-attribute name="body" value="/WEB-INF/jsp/accountSettings.jsp" />
</definition>

【问题讨论】:

    标签: spring hibernate filter spring-security tiles


    【解决方案1】:

    不要硬编码你的上下文路径,而是使用这个

    &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;

    &lt;a href="&lt;c:url value='/user/accountSettings'/&gt;"&gt;Account Settings&lt;/a&gt;

    我建议在 URL 中使用连字符,例如 account-settings

    【讨论】:

    • 其实我没有硬编码。我使用了这个 帐户设置 但您的解决方案也有效。在 URL 中使用连字符有什么用。我第一次听到这个。使用这个有什么好处。 @Neil McGuigan
    【解决方案2】:

    问题出在 HTML 链接中。你可以试试

    &lt;a href="accountSettings"&gt;Account Setting&lt;/a&gt;

    &lt;a href="/myapp/user/accountSettings"&gt;Account Setting&lt;/a&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2020-03-24
      • 2010-11-01
      相关资源
      最近更新 更多