Spring 安全基本路径重定向
Spring security base path redirection
我的应用程序的基本 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>
谢谢。
我不确定这是否是最佳做法:
在控制器中添加如下方法
@RequestMapping(value={"/login","/"}, method=RequestMethod.GET)
public String home(){
return "redirect:login";
}
第二种方法是写一个 login.jsp
并将这个 jsp 作为 web.xml
中的欢迎文件。在 login.jsp 中使用响应隐式对象重定向到 "login"。
Spring 如果用户是匿名用户并且请求的路径禁止匿名访问,安全性将重定向到登录页面。您的第一条规则:
<intercept-url pattern="/**" access="hasRole('ROLE_ANONYMOUS')" />
它允许匿名访问基础 URL,因此没有重定向。
注意!拦截规则按照声明的顺序进行评估,在第一次匹配后停止;换句话说:/**
应该总是最后一个。
我的应用程序的基本 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>
谢谢。
我不确定这是否是最佳做法: 在控制器中添加如下方法
@RequestMapping(value={"/login","/"}, method=RequestMethod.GET)
public String home(){
return "redirect:login";
}
第二种方法是写一个 login.jsp
并将这个 jsp 作为 web.xml
中的欢迎文件。在 login.jsp 中使用响应隐式对象重定向到 "login"。
Spring 如果用户是匿名用户并且请求的路径禁止匿名访问,安全性将重定向到登录页面。您的第一条规则:
<intercept-url pattern="/**" access="hasRole('ROLE_ANONYMOUS')" />
它允许匿名访问基础 URL,因此没有重定向。
注意!拦截规则按照声明的顺序进行评估,在第一次匹配后停止;换句话说:/**
应该总是最后一个。