[RESOLVIDO]Spring Security falha de segurança

Boa dia,

Estou aprendendo a usar o Spring Security e até agora esta tudo legal. Mas, estou tendo um pequeno probleminha 

com relação a segurança.
No arquivo web.xml do meu projeto esta seguinte configuração:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<display-name>Corvo</display-name>

	<welcome-file-list>
		<welcome-file>/views/index.xhtml</welcome-file>
	</welcome-file-list>



	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>
	<context-param>
		<param-name>javax.faces.CONFIG_FILES</param-name>
		<param-value>/WEB-INF/faces-config.xml</param-value>
	</context-param>

	<session-config>
		<session-timeout>60</session-timeout>
	</session-config>

	<!-- inicialização do contexto do Spring -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- delegar para o Spring o controle sobre o ciclo de vida do ManagedBeans -->
	<listener>
		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>

	<!-- configuração JSF -->
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>

	<context-param>
		<param-name>primefaces.THEME</param-name>
		<param-value>bootstrap</param-value>
	</context-param>

	<!-- Interceptar todas as requisições à aplicacão - 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>

</web-app>

E no meu arquivo applicationContext.xml


<!-- Restante omitido -->

	<!-- Configurações Spring Security -->
	<sec:http auto-config="true" use-expressions="true" access-denied-page="/denied.xhtml">				
		<sec:intercept-url pattern="/views/**" access="isAuthenticated()" />	
		<sec:form-login
			login-page="/login.xhtml" default-target-url="/views/index.xhtml" 
			authentication-failure-url="/login.xhtml"/>
		<sec:logout logout-url="/logout" logout-success-url="/login.xhtml"/>
	</sec:http>

	<!-- Usuários testes -->
	<sec:authentication-manager alias="authenticationManager">
		<sec:authentication-provider>
			<sec:user-service>
				<sec:user authorities="hasRole('ROLE_USER')" name="user" password="user" />
				<sec:user authorities="hasRole('ROLE_ADMIN')" name="admin" password="admin" />
			</sec:user-service>
		</sec:authentication-provider>
	</sec:authentication-manager>
  Até aew tudo bem!
  A minha página inicial é esta com o endereço assim: http://localhost:8080/Corvo/login.xhtml.
  Se eu digita qualquer outro endereço na url para acessar partes do projeto o spring security me redireciona para  pagina de login. TRANQUILO!  :D 
  Mas.... Meu problema é o seguinte, se não tiver logado e eu apagar da url o meu "/login.xhtml", ou seja, deixa somente assim "http://localhost:8080/Corvo/"

ele acessa minha página index.xhtml mesmo eu não estando logado, mas não posso fazer nada, pois a sessão não existe, senão o spring security me redireciona para o login.

 O que eu queria era não poder acessar meu index somente com esse endereço "http://localhost:8080/Corvo", pois isso é uma falha de segurança!  :evil: 
 Acho que p spring security só intercepta url quando é tentado acessar manualmente ou pelo uso do sistema mesmo, mas nesse caso ele não intercepta!

 Espero ter sido bem claro!   :shock: 

 Obrigado!   :)

Tenta adicionar a regra a raiz do projeto

<sec:intercept-url pattern="/**" access=“isAuthenticated()” />

Inicialmente estava assiim mas também não tinha dado certo!

Eu resolvi o problema, encontrei aqui:
http://stackoverflow.com/questions/11283098/spring-security-3-and-jsf-2-integration-without-redirecting-page

Tinha que colocar uma configuração no spring security

[code]

<sec:http auto-config=“true” use-expressions=“true” access-denied-page="/denied.xhtml" [color=red]once-per-request=“false”[/color]>
<sec:intercept-url pattern="/views/**" access=“isAuthenticated()” />
<sec:form-login
login-page="/login.xhtml" default-target-url="/views/index.xhtml"
authentication-failure-url="/login.xhtml"/>
<sec:logout logout-url="/logout" logout-success-url="/login.xhtml"/>
</sec:http>

Esse atributo once-per-request="false" que por padrão é true, ou seja, é feita apenas uma requisição por vez.
Mudei o status para falso e no meu web.xml precisa do REQUEST e FORWARD dentro da tag <filter-mapping>:


	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>

Após ter feito isso a minha aplicação não permitiu mais acessar meu sistema removendo da url o trecho “/login.xhtml” deixando somente “http://localhost:8080/Corvo”,
pois antes daria para ver a página index.xhtml.

Vlw!

Ta faltando coisa ai, coloque os diretórios com os perfis que terão acesso.


	<sec:authentication-manager alias="authenticationManager">
		<sec:authentication-provider>
			<sec:user-service>
				<sec:user authorities="hasRole('ROLE_USER')" name="user" password="user" />
				<sec:user authorities="hasRole('ROLE_ADMIN')" name="admin" password="admin" />
			</sec:user-service>
		</sec:authentication-provider>
	</sec:authentication-manager>

<profiles>
		<profile>
			<id>env-dev</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.mortbay.jetty</groupId>
						<artifactId>maven-jetty-plugin</artifactId>
						<version>6.1.26</version>
						<configuration>
							<webApp>
								<contextPath>/corvo</contextPath>
							</webApp>
						</configuration>
					</plugin>
				</plugins>
			</build>
			<dependencies>
				<dependency>
					<groupId>com.h2database</groupId>
					<artifactId>h2</artifactId>
					<version>1.3.167</version>
				</dependency>
			</dependencies>
			<properties>
				<persistence.ddl-generation>update</persistence.ddl-generation>
			</properties>
		</profile>
	</profiles>

Esse é o perfil de desenvolvimento que uso para rodar minha aplicação!
Podem ver que utilizo o Jetty… O problema é justamente nele, pois no perfil de produção utilizo jboss e não
preciso da configuração que fiz anteriormente no applicationContex.xml para Spring Security e nem no web.xml.