Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring Security 3 проблема миграции с 2 версии


Автор: acvilon 11.1.2010, 19:28
Решил я перевести проектик на третью версию спринга и отгреб проблем.
В тему призывается, MisterCleric.
Код

<?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: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 entry-point-ref="authenticationProcessingFilterEntryPoint">
        <custom-filter position="BASIC_AUTH_FILTER" ref="authenticationProcessingFilter"/>
        <custom-filter position="REMEMBER_ME_FILTER" ref="rememberMeProcessingFilter"/>
        <custom-filter position="LOGOUT_FILTER" ref="logoutFilter"/>
        <!-- Allow access welcome.htm to anyone (even un-authenticated users) -->
        <!--<intercept-url pattern="/welcome.htm" access="IS_AUTHENTICATED_ANONYMOUSLY"/>-->
        <intercept-url pattern="/test_ajax.jsp" filters="none"/>

        <!-- Don't apply any filters to the login form either, we want unauthenticated users to be able to see this -->
        <intercept-url pattern="/recovery" filters="none"/>
        <intercept-url pattern="/controller/recovery_password" filters="none"/>

        <intercept-url pattern="/design/**" filters="none"/>

        <intercept-url pattern="/**" access="ROLE_USER, ROLE_ORGANIZATION"/>

        <anonymous/>
        <http-basic/>
    </http>

    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="userDetailsService"/>
        <authentication-provider ref="rememberMeAuthenticationProvider"/>
    </authentication-manager>

    <!-- I've defined a custom UserDetails service to lookup users in my db using me own implementation -->
    <beans:bean id="userDetailsService" class="ru.iamready.security.UserDetailsServiceImpl">
        <beans:property name="loginInfoDAO" ref="loginInfoDAO"/>
    </beans:bean>

    <beans:bean id="authenticationProcessingFilterEntryPoint"
                class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:property name="loginFormUrl" value="/start"/>
        <beans:property name="forceHttps" value="false"/>
    </beans:bean>

    <!-- custom form authentication filter - overridden so I can do some other business logic when a user logs in (update login count etc) -->
    <beans:bean id="authenticationProcessingFilter"
                class="org.springframework.security.web.authentication.AuthenticationProcessingFilter">
        <!-- sets this as the authentication filter over the default -->

        <beans:property name="authenticationManager" ref="authenticationManager"/>
        <!--<beans:property name="authenticationFailureUrl" value=""/>-->
        <!--<beans:property name="defaultTargetUrl" value="/start"/>-->
        <!--<beans:property name="targetUrlResolver" ref="roleBasedTargetUrlResolver"/>-->
        <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/>
        <beans:property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>
        <beans:property name="filterProcessesUrl" value="/j_spring_security_check"/>
        <beans:property name="continueChainBeforeSuccessfulAuthentication" value="false"/>
        <beans:property name="rememberMeServices" ref="rememberMeServices"/>
    </beans:bean>

    <beans:bean id="authenticationFailureHandler" class="ru.iamready.security.AuthentificationFailureHandlerImpl">
        <beans:property name="authenticationFailureUrl" value="/start?authfailed=true"/>
    </beans:bean>

    <beans:bean id="authenticationSuccessHandler" class="ru.iamready.security.AuthentificationSuccessHandlerImpl">
        <beans:property name="organizationRoleTargetUrl" value="/org"/>
        <beans:property name="userRoleTargetUrl" value="/user"/>
    </beans:bean>

    <!-- Override RememberMeProcessingFilter to allow application of other business logic (update login count when user returns to the site -->
    <beans:bean id="rememberMeProcessingFilter"
                class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">

        <beans:property name="rememberMeServices" ref="rememberMeServices"/>
        <beans:property name="authenticationManager" ref="authenticationManager"/>
    </beans:bean>

    <!-- Defines which remember me implementation to use - in this case using a database table to log 'remembered' tokens -->
    <beans:bean id="rememberMeServices" class="ru.iamready.security.PersistentAuthTokenRememberMeServices">
        <beans:property name="tokenRepository" ref="authTokenDAO"/>
        <beans:property name="userDetailsService" ref="userDetailsService"/>
        <beans:property name="key" value="springRocks"/>
        <beans:property name="alwaysRemember" value="false"/>
        <beans:property name="cookieName" value="iamready_cookie_name"/>
        <!--Время жизни токена 10*60*60 секунд-->
        <beans:property name="tokenValiditySeconds" value="36000"/>
        <beans:property name="seriesLength" value="20"/>
        <beans:property name="tokenLength" value="20"/>
        <beans:property name="parameter" value="is_remember"/>
    </beans:bean>

    <beans:bean id="rememberMeAuthenticationProvider"
                class="org.springframework.security.authentication.RememberMeAuthenticationProvider">
        <!-- This ensures that remember-me is added as an authentication provider -->
        <beans:property name="key" value="springRocks"/>
    </beans:bean>

    <beans:bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">

        <beans:property name="filterProcessesUrl" value="/logout"/>

        <beans:constructor-arg value="/start?loggedout=true"/>
        <!-- URL redirected to after logout -->
        <beans:constructor-arg>
            <beans:list>
                <!-- I add a bean here to perform some custom tasks when the user logs out -->
                <beans:ref bean="rememberMeServices"/>
                <beans:bean class="ru.iamready.security.LogoutHandlerImpl"/>
            </beans:list>
        </beans:constructor-arg>

    </beans:bean>

    <beans:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
</beans:beans>


Вот настройки секьюрити. Вот что выдается при деплое:

[2010-01-11 19:17:32,047 DEBUG [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loaded 15 bean definitions from location pattern [WEB-INF/applicationContext.xml]
2010-01-11 19:17:32,048 INFO  [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/securityContext.xml]
2010-01-11 19:17:32,052 DEBUG [org.springframework.beans.factory.xml.DefaultDocumentLoader] Using JAXP provider [org.apache.xerces.jaxp.DocumentBuilderFactoryImpl]
2010-01-11 19:17:32,056 DEBUG [org.springframework.beans.factory.xml.PluggableSchemaResolver] Found XML schema [http://www.springframework.org/schema/beans/spring-beans-3.0.xsd] in classpath: org/springframework/beans/factory/xml/spring-beans-3.0.xsd
2010-01-11 19:17:33,361 DEBUG [org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader] Loading bean definitions
2010-01-11 19:17:33,402 ERROR [org.springframework.web.context.ContextLoader] Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
Offending resource: ServletContext resource [/WEB-INF/securityContext.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:136)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)

И никак не могу решить проблему. Хелп плз. Мучаюсь уже полдня. 

Автор: MisterCleric 11.1.2010, 20:20
Привет. А у тебя лежит в CLASSPATH такой jar:

spring-security-config-3.0.0.RELEASE.jar

Вот в нем и схема и хендлер...

Автор: acvilon 11.1.2010, 20:42
А артифакт мавеновский у этой Либы есть? 

Автор: MisterCleric 11.1.2010, 23:26
Я в мавене не шарю. Укажи его по аналогу с core.jar.
Я просто руками с сайта скачал весь релиз. А там также самплы есть

Автор: Старовъръ 14.1.2010, 10:32
http://repo1.maven.org/maven2/org/springframework/security/spring-security-config/3.0.0.RELEASE/ 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)