0

我是 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 名称

in security-context.xml jack/jack/login之类的模式

当我给出 URL 时

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 意味着 Spring Security 不会将用户重定向到登录页面。

我如何将用户重定向到弹簧登录页面,或者我还有其他选择吗?

4

2 回答 2

1

尝试在拦截 url 模式中使用项目,而不是杰克使用 ** 那里,然后你要限制的其余 url。

例如。而是/jack/upload-users使用/project/**/upload-users.

还要注意IS_AUTHENTICATED_ANONYMOUSLY用于允许访问用户,即使他没有在应用程序中进行身份验证。

希望这对您有所帮助。干杯。

于 2013-05-23T10:42:53.760 回答
0

目前,您默认允许使用访问所有 URL

  `<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />`

因此,您需要将每个要保护的 URL 列入黑名单。Spring security 正在按照配置中列出的顺序检查模式。应用第一个匹配模式,无需任何进一步检查。因此,如果没有模式匹配,pattern="/**"将应用授予任何人访问权限。

更好的做法是默认拒绝访问,这意味着将访问权限设置为pattern="/**"您拥有的最许可角色或至少要求身份验证(例如使用access="isAuthenticated()")这样您就可以使用白名单方法,不必担心太多关于缺少 url 模式。

更新

评论注销问题。您重定向到自定义logout-url. 该网址之外还有什么?/j_spring_security_logout如果您不调用,则默认通过调用 spring 安全注销例程,logout-url否则您应该/j_spring_security_logout在自定义注销例程中调用。

于 2013-05-23T11:01:02.157 回答