我是SpringSecurity的新手。
这是我的Spring-security-Context.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:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<http auto-config="true" path-type="ant">
<form-login login-page="/jack/login" authentication-failure-url="/jack/login" default-target-url="/jack/home" />
<intercept-url pattern="/themes/**" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/js/**" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/images/**" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/**/*.png" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/**/*.jpg" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/upload-users" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/jack/login" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none" />
<intercept-url pattern="/jack/logincheck" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/jack/logout" access="IS_AUTHENTICATED_ANONYMOUSLY" filters="none"/>
<intercept-url pattern="/jack/sessionExpire" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/jack/**" access="IS_AUTHENTICATED_REMEMBERED" />
<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:logout logout-url="/jack/logout"
logout-success-url="/jack/login" invalidate-session="true" />
<session-management invalid-session-url="/jack/logout" >
<concurrency-control max-sessions="1" error-if-maximum-exceeded="false" expired-url="/jack/logout"/>
</session-management>
<security:custom-filter ref="expiredSessionFilter" after="REMEMBER_ME_FILTER"/>
</http>
<beans:bean id="expiredSessionFilter" class="com.jack.web.filter.ExpiredSessionFilter">
</beans:bean>
<!-- Authentication providers -->
<beans:bean id="customAuthenticationProvider" class="com.jack.security.provider.CustomAuthenticationProvider" >
<!-- <security:custom-authentication-provider /> -->
<!-- <beans:property name="userDetailsService" ref="userDetailsService"/> -->
</beans:bean>
<authentication-manager>
<authentication-provider ref="customAuthenticationProvider" />
</authentication-manager>
</beans:beans>
案例1:
在web.xml
jack 是springcontext名称
security-context.xml
中的jack 是 / jack / login
之类的模式当我提供像
这样的网址时localhost:8080/project/jack/login
这个春天的安全工作非常顺利
案例2:
在web.xml
xxx 是springcontext名称
在security-context.xml中 jack 是 / jack / login
之类的模式我没有在securitycontext.xml中更改任何内容
当我给出
localhost:8080/project/xxx/login
spring security允许用户进入我的应用程序。
注销后,如果用户复制 - 粘贴主页url意味着弹簧安全 不会将用户重定向到登录页面。如何将用户重定向到 春天登录页面还是我有其他选择?
答案 0 :(得分:1)
尝试在intercept-url模式中使用项目,而不是使用插孔,然后使用**,然后使用其他要限制的网址。
EG。相反,/jack/upload-users
使用/project/**/upload-users
。
并且还注意到 IS_AUTHENTICATED_ANONYMOUSLY 用于允许用户访问,即使他未在应用程序中进行身份验证。
希望这会对你有所帮助。欢呼声。
答案 1 :(得分:0)
目前,您默认允许使用
访问所有网址 `<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />`
因此,您需要将要保护的每个网址列入黑名单。 Spring安全性正在按照配置中列出的顺序检查模式。应用第一个匹配模式而无需进一步检查。因此,如果没有模式匹配,将应用pattern="/**"
授予任何人访问权限。
更好的做法是默认拒绝访问,这意味着将pattern="/**"
的访问权限设置为您拥有的最多权限角色,或者至少要求身份验证(例如使用access="isAuthenticated()"
)这样您就是使用白名单方法,不必担心丢失网址模式。
<强>更新强>
评论退出问题。您重定向到自定义logout-url
。超出那个网址的是什么?弹出安全注销例程通过/j_spring_security_logout
调用,如果您不调用logout-url
,则默认调用例程,否则您应该在自定义注销例程中调用/j_spring_security_logout
。