O Spring Security , já abre a aplicação com uma tela de login… , mas para meu site, não quero que os usuário tenham que fazer login logo de cara, até porque não faz sentido… , vai ter uma area para login dentro do site, alguem sabe como configurar o Spring Security para fazer a validação do login somente quando o usuario for acessar essa opção dentro do site ?
Bom dia.
Pode sim. Eu mesmo tinha um site em Java com uma tela principal de buscas sem necessidade de login, onde usava Spring Security.
Era necessário logar apenas quando o usuário necessitava cadastrar informações.
Basta no seu arquivo de configuração do Spring Security você configura as permissões de acesso apenas com bloqueio geral, apenas com exceção a alguma pasta.
Veja o meu como estava.
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/index.jsp" access="permitAll" />
<intercept-url pattern="/public/**" access="permitAll" />
<intercept-url pattern="/resources/**" access="hasAuthority('ROLE_USER')" />
<intercept-url pattern="/pages/**" access="hasAuthority('ROLE_USER')" />
<logout invalidate-session="true" logout-success-url="/public/index.faces" />
<session-management>
<concurrency-control expired-url="/public/index.faces" />
</session-management>
<form-login login-page="/login.faces"
authentication-failure-url="/login.faces?erro=true"
default-target-url="/pages/principal/index.faces" />
<logout logout-success-url="/public/index.faces" />
<logout delete-cookies="JSESSIONID" invalidate-session="true" />
</http>
Perceba que com o código abaixo o bloqueio é feito para tudo que existir abaixo da pasta hierárquica ‘pages’
<intercept-url pattern="/pages/**" access="hasAuthority('ROLE_USER')" />
E no código abaixo, permito que o conteúdo que existir dentro da pasta public possa ser acessado sem que o spring-security intercepte.
Tente fazer algo desta forma.
[]'s
muito obrigado pela sua resposta edumatias ! , nesse projeto em questão , não utilizamos xml para configurar , isso pode ser feito através de programação ? (sou novato em SpringSecurity) desde já agradeço a ajuda ! .
Opa,
Pode sim. Confesso que XML para estar configurações está um pouco ultrapassado. Mas ainda utilizei em meu projeto.
No método configure da classe SecurityConfig você define as questões de permissões de acesso.
Ex:
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/acesso/erro").permitAll()
.antMatchers("/bootstrap/**", "/jquery-ui/**", "/extras/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/acesso/login").permitAll()
.loginProcessingUrl("/login").permitAll()
.usernameParameter("login")
.passwordParameter("senha")
.successHandler(new CustomAuthenticationSuccessHandler())
.failureHandler(new CustomAuthenticationFailureHandler())
.and()
.rememberMe()
.key("remember-me")
.useSecureCookie(true)
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/acesso/login").permitAll();
}
Inicialmente tem-se uma pequena dor de cabeça para configuração inicial.
Mas tem vários materiais que ajudam a configurar.
Tente iniciar esta implementação.
Veja também sobre como utilizar DelegatingFilterProxy
valeu mesmo edumatias, era o que eu tava precisando… com isso vou conseguir configurar tudo certo, muito obrigado pelas dicas e exemplos !
Aqui vai um extra que também é uma configuração sem xml
muito bom cara… lega demais, valeu ai