【问题标题】:Spring security base path redirectionSpring安全基本路径重定向
【发布时间】:2015-02-07 00:00:41
【问题描述】:

我的应用程序的基本 uri 是 localhost:8080/COMEI_Beneficiario,但我必须写 localhost:8080/COMEI_Beneficiario/login 才能访问。在其他应用程序中,它会在编写基本 uri 时将自身重定向到 /login,但我无法找到配置之间的差异。您将在下面找到 .xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security-3.1.xsd
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util-3.1.xsd">



    <http auto-config="true"  use-expressions="true">
        <intercept-url pattern="/**" access="hasRole('ROLE_ANONYMOUS')" />
        <intercept-url pattern="/login" access="permitAll"/>
        <intercept-url pattern="/jcaptcha" access="permitAll"/>
        <intercept-url pattern="/olvidePassword" access="permitAll"/>
        <intercept-url pattern="/recovery/*" access="permitAll"/>
        <intercept-url pattern="/usuario/*" access="permitAll"/>
        <intercept-url pattern="/paginaMensajes" access="permitAll"/>
        <intercept-url pattern="/loginfailed" access="permitAll"/>
        <intercept-url pattern="/resources/**" access="permitAll" />
        <intercept-url pattern="/menu" access="hasRole('MENU_BENEFICIARIO')" />

<!--        <intercept-url pattern="/" access="hasRole('0')"/> -->
        <intercept-url pattern="cartilla" access=" hasRole('BENEFICIARIO')" />
        <intercept-url pattern="/cartilla/**" access=" hasRole('BENEFICIARIO')" />
        <intercept-url pattern="consumos" access=" hasRole('CONSUMOS')" />
        <intercept-url pattern="/consumos/**" access=" hasRole('CONSUMOS')" />
<!--        <intercept-url pattern="/**" access="hasRole('0')" /> -->
        <access-denied-handler error-page="/403"/>

        <form-login login-page="/login" default-target-url="/menu"
            authentication-failure-url="/loginfailed" always-use-default-target="true"  
    />


        <logout logout-url="/j_spring_security_logout" invalidate-session="true" logout-success-url="/logout"/>
    </http>

<authentication-manager>
      <authentication-provider user-service-ref="userDetailsServiceImpl">

      </authentication-provider>
</authentication-manager>

</beans:beans>

谢谢。

【问题讨论】:

    标签: java spring login spring-security


    【解决方案1】:

    不确定这是否是最佳做法: 在控制器中添加如下方法

    @RequestMapping(value={"/login","/"}, method=RequestMethod.GET)
    public String home(){
       return "redirect:login";
    }
    

    第二种方法是写一个login.jsp 并将这个jsp 作为欢迎文件在web.xml 中。在 login.jsp 中使用响应隐式对象重定向到“登录”。

    【讨论】:

    • 感谢您的回答,我解决了您提出的方式,但我会尝试通过安全xml完成​​。
    【解决方案2】:

    如果用户是匿名用户并且请求的路径被禁止匿名访问,Spring Security 将重定向到登录页面。您的第一条规则:

    <intercept-url pattern="/**" access="hasRole('ROLE_ANONYMOUS')" />
    

    它允许匿名访问基本 URL,因此没有重定向。

    注意!拦截规则按照声明的顺序进行评估,在第一次匹配后停止;换句话说:/** 应该始终排在最后。

    【讨论】:

    • 感谢您的回答。我删除了那行,但我仍然没有重定向。
    • @LukeSpringWalker 尝试重新引入您已注释掉的 intercept-url 规则之一。
    猜你喜欢
    • 2014-03-26
    • 2016-12-03
    • 2014-02-12
    • 1970-01-01
    • 2014-03-28
    • 2016-10-26
    • 2019-02-25
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多