2013-09-27 2 views
1

Мне нужна ваша помощь. Мне нужно использовать форму входа в систему Spring Security. Когда я запустил webapp, он должен открыть страницу входа и после успешного входа в систему переадресовать пользователя на мою страницу jsp, не глядя на роль (admin или просто пользователь). Я попытался это:Весна Безопасность Форма входа

<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

вам нужно определить одну страницу в приложении без ограничения роли. и установите эту страницу как форму по умолчанию-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 укажите одну страницу в качестве страницы приветствия, прежде чем перенаправлять ее, весенняя безопасность предложит вам войти в систему. –

0

спасибо всем, кто пытался мне помочь. Я решаю эту проблему. И напишите это сообщение другим разработчикам, которые столкнутся с такой проблемой. Я создал приветственную страницу с доступом для всех пользователей и анонимным. Код страницы:

<a href="index">Catalog</a> 
<br> 
<a href="registration">Registration</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> 

и главную страницы, прикрепленная:

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

Spring Security позволяет получить доступ к этой странице только после авторизации , Страница входа в систему, созданная Spring Security. Надеюсь, это поможет кому-то.

Смежные вопросы