2013-09-27 219 views
1

我需要你的幫助。我需要使用Spring Security的默認登錄形式。當我啓動webapp時,它應該打開登錄頁面,成功登錄後將用戶重定向到我的jsp頁面而不顯示角色(管理員或用戶)。我嘗試這樣做:Spring Security登錄表

<http auto-config="true" create-session="stateless" 
    use-expressions="true"> 
    <intercept-url pattern="/_ah*" access="permitAll" /> 
    <intercept-url pattern="/pages/*" access="hasRole('ROLE_ADMIN')" /> 
    <intercept-url pattern="/index*" access="hasRole('ROLE_ADMIN')" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="working_sql_script" 
      authorities-by-username-query="other_working_sql_script" /> 
    </authentication-provider> 
</authentication-manager> 

但它開始打開空白頁,我需要去到登錄頁面輸入瀏覽器:http://webapp/spring_security_login。我可以如何配置它以在開始時打開登錄頁面並在登錄後重定向到我的JSP?此外,我寫在web.xml中

<welcome-file-list> 
    <welcome-file>/WEB-INF/pages/index.jsp</welcome-file> 
</welcome-file-list> 

但它仍然打開空白頁開始。

+0

這裏指定的身份驗證提供程序在哪裏? – Arham

+0

這是一個很好的例子,http://www.mkyong.com/spring-security/spring-security-form-login-example/希望它有幫助。 – Arham

+0

我更新了我的問題。鏈接中的這個例子並沒有幫助我。我無法運行此應用程序。它說java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener。 bu我確定這個類在classpath和我創建的WEB-INF/lib文件夾中並複製到這個文件夾中所有需要的罐子 –

回答

2

您需要在應用程序中定義一個不受角色限制的頁面。並將該頁面設置爲默認的form-login。在身份驗證成功重定向到其他頁面。

我的彈簧security.xml文件的代碼部分如下

<http pattern="/login" security="none"/> 
<http pattern="/accessDenied" security="none"/> 
<http auto-config="true"> 
    <remember-me/> 
    <!-- Don't set any role restrictions on login.jsf --> 
    <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/pages/admin/*" access="ROLE_SADMIN" /> 
    <intercept-url pattern="/pages/applicants/*" access="ROLE_SADMIN,ROLE_APPLICANT" /> 

    <!-- Set the login page and what to do if login fails --> 
    <form-login login-page="/login" authentication-failure-url="/login" 
       default-target-url="/manageHome" authentication-success-handler-ref="customAuthenticationSuccessHandler"/> 

    <logout success-handler-ref="customLogoutSuccessHandler" /> 
    <access-denied-handler ref="customAccessDeniedHandler"/> 

</http> 
+0

謝謝,但是我有任務:不要使用自定義登錄表單。只有默認的 –

+0

可以限制所有頁面,並在web.xml中指定一個頁面作爲歡迎頁面,在重定向到之前,spring security會提示登錄。 –

0

感謝所有,誰試圖幫助我。我解決了這個問題。並寫這篇文章給其他面臨這樣問題的開發者。我爲所有用戶和匿名用戶創建了歡迎頁面。頁面的代碼:

<a href="index">Catalog</a> 
<br> 
<a href="registration">Registration</a> 

我春天的安全文件包含此:

<h2>Catalog</h2> 
<a href="logout">Logout</a> 
<a href="goods">Goods</a> 
<a href="vendors">Vendors</a> 

春季安全允許此頁面僅在登錄後訪問:固定

<http auto-config="true" create-session="stateless" 
    use-expressions="true"> 
    <intercept-url pattern="/welcome" access="isAnonymous()" /> 
    <intercept-url pattern="/registration" access="isAnonymous()" /> 
    <intercept-url pattern="/index" access="isAuthenticated()" /> 
    <form-login default-target-url="/main"/> 
</http> 

和主頁。 Spring Security生成的登錄頁面。希望,這將有助於某人。