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! :)