Spring security - não consigo acesso à página de login

0 respostas
jaboot

Olá, obrigado por ajudar

Projeto Spring MVC 3.2.2
Spring Security 3.1.4
Tiles 2.2.2

Eu criei um projeto no Openshift e estava funcionando a parte MVC numa boa. Ao adicionar o Spring-Security, não estou conseguindo acesso à página de login, eu não tenho certeza do que pode ser. Bom, vou tentar explicar o que fiz até o momento. A estrutura do projeto é /]essa e tem uma página login.jsp dentro do diretório login.

O web.xml
<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<context-param>
      	<param-name>contextClass</param-name>
		<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
   	</context-param>

   	<context-param>
    	<param-name>contextConfigLocation</param-name>
		<param-value>br.com.meuprojeto.config</param-value>
   	</context-param>

   	<listener>
   		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   	</listener>
	
	<!-- Spring Security -->
	<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>
	<!-- fim security -->
O tiles-context
<bean id="tilesviewResolver"
		class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" 
		p:order="0" />

	<bean id="tilesConfigurer"
		class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
		<property name="definitions">
			<list>
				<value>/WEB-INF/jsp/**/tiles.xml/</value>
			</list>
		</property>
	</bean>
O applicationContext
<context:annotation-config />
	
	<mvc:annotation-driven /> 
	
	<context:component-scan base-package="br.com.meuprojeto" />
		
	<import resource="tiles-context.xml" />
	
 	<mvc:resources mapping="imagens/**" location="/resources/images/*" /> 	
 	<mvc:resources mapping="css/**" location="/resources/css/*" /> 	
 	<mvc:resources mapping="javascript/**" location="/resources/javascript/*" />
 	
 	<mvc:default-servlet-handler />
O spring-servlet
<bean 	id="viewResolver" 
	    	class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    		p:prefix="/WEB-INF/jsp/" 
    		p:suffix=".jsp" 
    		p:order="1" />
E finalmente, o webSecurityConfig (é chamado por uma classe anotada)
<http use-expressions="true">

	<intercept-url pattern="/anonymous*" access="isAnonymous()" />
        <intercept-url pattern="/login*" access="permitAll" />
        <intercept-url pattern="/**" access="isAuthenticated()" />

              
		<form-login
			login-page="/login/login.jsp"
			login-processing-url="/perform_login" 
			default-target-url="/login/homepage.jsp"
			authentication-failure-url="/login.html?error=true" 
			always-use-default-target="true"/>
            
            <logout 
            	logout-url="/perform_logout"
                delete-cookies="JSESSIONID"
                success-handler-ref="customLogoutSuccessHandler" />
	</http>
    
    <beans:bean name="customLogoutSuccessHandler" class="br.com.meuprojeto.security.CustomLogoutSuccessHandler" />
	
	<authentication-manager>
		<authentication-provider>
			<user-service>
				<user name="user1" password="user1Pass" authorities="ROLE_USER" />
			</user-service>
		</authentication-provider>
	</authentication-manager>
Tentativa 1: como está descrito no meu spring-servlet, vou acessar minhas páginas a partir do /jsp -> então tentei site:8080/login/login.jsp direto e deu dois erros - um com o /]firefox e outro com o /]chrome; Acredito que entrou em um loop, mas não entendi porque. O /login não está permitido?! Tentativa 2: Tentar com rest na unha. Criei outro controller
@Controller
@RequestMapping("/")
public class MeuProjetoController {

	@RequestMapping(value = "/teste", method = RequestMethod.GET)
	public String testeLogin(ModelMap map, Model model) {

		logger.info("estou indo para a pagina de login");

		return "login-page";

	}
No definition do "login-page" do tiles ele retorna
<definition name="login-page" extends="template-main">
		<put-attribute name="primary-content" value="/WEB-INF/jsp/login/login.jsp" />
	</definition>
E no arquivo webSecurityConfig eu adicionei
<intercept-url pattern="/teste*" access="permitAll" />
e alterei
<form-login
			login-page="/teste"
Então eu acessei minhaAplicacao:8080/teste e tomei um /]lindo 404 -> PAGE NOT FOUND. No log do servidor ele me responde 2013/06/12 18:38:27,189 WARN [org.springframework.web.servlet.PageNotFound] (http-ip-8080-1) No mapping found for HTTP request with URI [/teste] in DispatcherServlet with name 'spring'

Mas eu não tinha liberado o /teste para qualquer um? Cadê o meu acesso ao meu Controller?!
As configurações dos meus ViewResolvers (Internal e Tiles View Resolver) podem atrapalhar as configurações do Spring-Security?

Espero ter sido o mais claro possível e obrigado por ajudar (pelo menos de ter lido até aqui)

Criado 12 de junho de 2013
Respostas 0
Participantes 1