весенняя безопасность не работает - PullRequest
2 голосов
/ 07 февраля 2011

Я разрабатываю приложение Struts2 + Spring + Tiles + Hibernate + Spring.

Когда я захожу на URL / регистр, меня правильно перенаправляют на страницу входа, но при входе в систему с использованием имени пользователя и пароля, указанных вфайл конфигурации bean, я перенаправлен обратно на страницу входа с URL «login? error = true», что означает, что вход был неудачным, так как я упомянул «authentication-fail-url =» / login? error = true »«

Я настроил регистрацию на основе формы со следующей конфигурацией

// web.xml

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>
    /WEB-INF/applicationContext.xml
    /WEB-INF/medic-security.xml 
    </param-value> 
</context-param> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class> 
        org.springframework.web.filter.DelegatingFilterProxy 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

// medics-security.xml

<http auto-config="true" access-denied-page="/error">
<intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/register*" access="ROLE_USER" />
<intercept-url pattern="/messagePost*" access="ROLE_USER" /> 
<intercept-url pattern="/messageDelete*" access="ROLE_ADMIN" /> 
<form-login login-page="/login" authentication-failure-url="/login?error=true"/> 
<remember-me/>
<logout/>

</http> 

<authentication-manager> 
   <authentication-provider> 
      <user-service>
      <user name="admin" password="secret" authorities="ROLE_USER"/>
      </user-service>   
   </authentication-provider> 
</authentication-manager> 

// login.jsp

<form action="j_spring_security_check"> 
    <label for="j_username">Username</label>
<input type="text" name="j_username" id="j_username"/><br/> 
    <label for="j_password">Password</label>
<input type="password" name="j_password" id="j_password"/><br/> 
    <input type='checkbox' name='_spring_security_remember_me'/> Remember me<br/>   
    <input type="submit" value="Login"/>
<input type="reset" value="Reset"/>
</form>

// struts.xml

<package name="default" namespace="/" extends="struts-default">
    <action name="login" class="com.medics.action.LoginAction">
    <result name="SUCCESS" type="tiles">login</result>
    </action>

    <action name="register" class="com.medics.action.RegisterAction">
    <result name="SUCCESS">/Register.jsp</result>
    </action>
</package>

Классы действий ничего не делают, кроме возврата "SUCCESS"

1 Ответ

3 голосов
/ 07 февраля 2011

Поскольку вы не указали method для <form>, он использует GET, то есть default.spring-security 3.x не разрешает аутентификацию с использованием GET, по умолчанию.

Можете ли вы попробовать добавить method="post" и посмотреть, поможет ли это?

...