首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Security -拦截后重定向到特定url -url访问失败

Spring Security -拦截后重定向到特定url -url访问失败
EN

Stack Overflow用户
提问于 2012-07-22 20:38:34
回答 2查看 9.8K关注 0票数 0

我有以下规则来访问我的应用程序中的页面:

代码语言:javascript
运行
复制
<http auto-config="true" use-expressions="true">
        <!-- NON AUTHENTICATION PAGES -->
        <intercept-url pattern="/" access="permitAll" />
        <intercept-url pattern="/about" access="permitAll" />       

        <!-- LOGIN FILTER -->
        <intercept-url pattern="/login" access="!isAuthenticated()" />
        <intercept-url pattern="/j_spring_security_check" access="!isAuthenticated()" />
        <intercept-url pattern="/logout" access="!isAuthenticated()" />

        <!-- RESOURCES AND OTHER URLs FILTER -->
        <intercept-url pattern="/resources/**" access="permitAll" />
        <intercept-url pattern="/**" access="isAuthenticated()" />

        <!-- FORM LOGIN -->
        <form-login login-page="/login" default-target-url="/upload" authentication-failure-url="/loginfailed"  />
        <logout logout-success-url="/logout" />
    </http>

当访问失败时,我需要的是重定向到某个url (例如/ access -denied),并在控制器中处理此事件。

代码语言:javascript
运行
复制
@RequestMapping(value = "/access-denied", method = RequestMethod.GET)
    public String accessDenied(Model model, RedirectAttributes ra) {

    // do what I want

    return "redirect:login";
}

例如,用户输入/upload,但他没有登录,因此它将被重定向到/access-denied。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-23 00:16:56

这可能有助于解释为什么你需要自己做重定向,因为Spring Security会自动做这件事。当访问被拒绝时,未经身份验证的用户的默认行为是将他们重定向到登录页面(这似乎是您想要做的)。

如果你想定制流程,使用的策略是AuthenticationEntryPoint它实现起来可能比使用控制器更有意义。我已经在a previous answer中写过更多关于这方面的内容。

如果只想插入一些额外的功能,可以扩展LoginUrlAuthenticationEntryPoint并覆盖commence方法,调用超类进行重定向。

请注意,这意味着不会使用名称空间元素中的login-page值。您需要在LoginUrlAuthenticationEntryPoint的构造函数中设置登录URL。

票数 2
EN

Stack Overflow用户

发布于 2014-10-06 21:05:46

请注意下面代码中security-http中的access-denied-page属性。

代码语言:javascript
运行
复制
<security:global-method-security
            pre-post-annotations="enabled" />
    <security:http auto-config="false" use-expressions="true"
            disable-url-rewriting="true" entry-point-ref="loginUrlAuthenticationEntryPoint"
            access-denied-page="/access-denied">
        <security:intercept-url pattern="/someurl"
                access="isAuthenticated()" />
</security:http>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11600363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档