Marek Banach

Marek Banach programista, x

Temat: spring security

Witam,

Poraz pierwszy stykam się z Spring Security. Korzystam z Mavena tomcat 6. Podczas polecenia tomcat:deploy pojawił się błąd:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 13 in XML document from ServletContext resource [/WEB-INF/spring/spring-security.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.

Konfiguracja spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>

<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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-bea...
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-...
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util...">

<http pattern="/resources" security="none" />

<http auto-config="true" use-expressions="true">
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/logout" access="permitAll"/>
<intercept-url pattern="/denied" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/user" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')"/>

<form-login login-page="/login"
authentication-failure-url="/login/failure"
default-target-url="/"/>

<access-denied-handler error-page="/denied"/>

<logout invalidate-session="true"
logout-success-url="/logout/success"
logout-url="/logout"/>
</http>

<authentication-manager>
<authentication-provider user-service-ref="customUserDetailsService">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
</beans>

Proszę o pomoc. Nie wiem jak to "ładnie" rozwiązać.
Daniel Mroczka

Daniel Mroczka Experienced Java
Developer

Temat: spring security

> Proszę o pomoc. Nie wiem jak to "ładnie" rozwiązać.

Ja z reguły czytam dokumentacje:
http://static.springsource.org/spring-security/site/do...
Marek Banach

Marek Banach programista, x

Temat: spring security

dzięki,

ten błąd udało mi się już zlikwidować. za to pojawił się taki:

EVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#1' while setting bean property 'sourceList' with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.DefaultSecurityFilterChain#1': Cannot resolve reference to bean 'org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0' while setting constructor argument with key [2]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0': Cannot resolve reference to bean 'org.springframework.security.authentication.ProviderManager#0' while setting bean property 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.ProviderManager#0': Cannot resolve reference to bean 'org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authenticationManager': Cannot resolve reference to bean 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0' while setting constructor argument with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Cannot resolve reference to bean 'customUserDetailsService' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customUserDetailsService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.photointegrator.dao.interfaces.UserDao pl.photointegrator.service.CustomUserDetailsService.dao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateUserDao': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.hibernate.SessionFactory pl.photointegrator.dao.implementation.hibernate.HibernateUserDao.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/data-access-context.xml]: Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: class org.hibernate.cfg.ExtendedMappings has interface org.hibernate.cfg.Mappings as super class
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)

do tego kożystam z hibernatu
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: spring security

Sprawdź czy do targetu nie lecą Ci podwójnie jary hibernate (z różnymi wersjami)
Marek Banach

Marek Banach programista, x

Temat: spring security

hibernate-commons-annotations-3.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate-validator-4.1.0.Final.jar
hibernate-annotations-3.4.0.GA.jar
hibernate-core-3.6.0.Final.jar

tylko to jest
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: spring security

Sprawdź czy przypadkiem hibernate-annotations nie jest nadmiarowe. Od wersji 3.6.0 hibernate'a ponoć zostało zintegrowane do hibernate-core
Marek Banach

Marek Banach programista, x

Temat: spring security

To była przyczyna błędu. Dziękuje za pomoc.

Pozdrawiam,
Marek

konto usunięte

Temat: spring security

To ja jeszcze dodam swe trzy grosze:

1. Do stron login/logout/denied etc. najlepiej utworzyć reguły które wyłączają spring security, tj. jeśli ktoś wchodzi na tą stronę, wtedy po prostu jest wyświetlana z pominięciem sprawdzania użytkownika. Taką regułę masz już napisaną i tyczy się ona wywołania zasobów /resources (security=none)

2. Poziom "permitAll" nie oznacza przepuść wszystkich a przepuść wszystkich którzy mają jakiś poziom dostępu, więc jeśli przychodzi ktoś zupełnie obcy a Twoja aplikacja nie nadaje mu nawet poziomu ANONYMOUS to będziesz mieć problem

3. reguła dla zasobów powinna chyba być w stylu 'pattern="/resources/**"'

4. Jeśli tworzysz reguły które wyłączają spring security warto je odpowiednio ułożyć (spring działa na zasadzie Firts-traf czyli pierwsza reguła jaka pasuje do naszego żądania zostanie użyta do sprawdzenia dostępu.) więc dobrze jest najpierw wyłączać filtry dla żądań które będą najczęstrze (np. pliki statyczne wyglądu stron, js/css/png etc.)

5. ja jako ostanią regułę stosuję regułę blokującą, coś ala:

<intercept-url pattern="/**" access="hasRole('ROLE_DENIED')"/>

dzięki temu, jeśli zapomnę do jakiegoś żądania dodać zabezpieczenia to nikt się tam niepostrzeżenie nie dostanie.

Jak coś piszę źle to poprawcie :)

Następna dyskusja:

Spring Security i wiele spo...




Wyślij zaproszenie do