Logout utilizando o Spring Security

14 respostas
J

Sr’s estou com muita dificuldade para conseguir fazer um simples logout utilizando o Spring Security!
Gostaria,se possível que alguém me passa-se o conceito dele pois estou meio perdido não estou entendendo ele com clareza já procurei em vários lugares e não achei algo que me esclareça.
Acho sempre este trecho"<a href="<c:url value="/j_spring_security_logout"/>">Logout" mais ai fico perdido pois já testei ele de varias formas.
Pergunta: eu só preciso adicionar este trecho de código ou tenho que fazer outras configurações, ou substituir este trecho por uma pagina de logout???

Config. Do Spring Security

<http auto-config='true' access-denied-page="/login.jsp">
    <intercept-url pattern="/api/**" access="ROLE_USER" />
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

    <form-login authentication-failure-url="/login.jsp" default-target-url="/index.jsp" login-page="/login.jsp" login-processing-url="/login.jsp"/>
    <logout logout-success-url="/login.jsp" logout-url="/j_spring_security_logout"/>
  </http>

14 Respostas

P

Amigão é só criar uma Classe Controller com este método:

// finaliza sessão
@RequestMapping("logout")
public String logout(HttpSession session) {
	session.invalidate();
	return "redirect:login";
}

E na sua tag referencie o href=“logout”

<a href="logout">Log out?<a>

Não há necessidade nenhuma de configurar o spring-context!

Para fazer o logout de forma correta você deve ter um usuário logado ao sistema!

J

Bom Dia!
ppro11, Mano desta forma eu sei como fazer, mais eu gostaria de saber como funciona essa parte de logout do Spring Security.
Por Ex: Se eu colocar somente essa tag no arquivo de conf. e dizer qual pagina eu desejo que ele vá apos eu cliclar no link bastaria ou eu devo fazer alguma conf. a mais.

P

Eu não vejo a necessidade de você colocar nada no arquivo de configuração se você chamar método que faz o logout, já é o bastante para encerrar a sessão e não deixar o usuário ficar logado! - se você estiver usando o Interceptor se um usuário não estiver logado ele não pode acessar as páginas da sua aplicação.

J

Blz ppro11,eu tambem acho isso. Mas no arquivo de conf. do Spring Sec. se eu consigir automatizar todo o processo pq não usar?
Mas acontece que eu não sei utiliza-ló, e estou querendo apreeender.

P

Ta certo é sempre bom aprender! - É que recentemente eu fiz uma aplicação em SpringMVC e não utilizei o spring-context, isolei o método logout na Classe LoginController e onde eu precisei eu usei a url para fazer o logout!

J

Entendi mano.
É que estou procurando entender mais sobre o conceito do Spring Security suas conf. entre outras, mas agradeço de qualquer forma.

A

Nesse trecho

Você esta mapeando um endereço para a ação de logout, é a mesma coisa que

Mas automaticamente o Spring security vai invalidar sua sessão e te redirecionar para sua pagina de Login novamente, é como se o processo que o ppro11 mostrou já tivesse sido implementado pelo Spring security

J

AmauriSpPoa mano valeu,pela explicação!
Cara mais uma duvida, ao inves de eu colocar

como é o tradicional se não usar a conf do Spring Sec. eu devo colocar

<a href="/j_spring_security_logout"> Sair do Sistema <a> ???

Que no caso seria o idendificador do mapeamento do logout ou eu estou errado???

A

Caso você queira pode alterar o url do link parahref="\logout" basta alterar na configuração do Spring também&lt;logout logout-success-url="/login.jsp" logout-url="/logout"/&gt;

J

AmauriSpPoa cara desculpa pela demora pra responder.
Cara eu testei minha aplicação com a conf. q vc passou e não esta funcionando.
Mano eu precisso criar um controller para redirecionar a app???

A

Bom não vai funcionar mesmo a barra que eu coloquei ta errada :oops: href="/logout"
agora se mesmo assim não funcionar segue como eu fiz(no seu caso não tem o prefixo “security:”)

<security:http auto-config="true" access-denied-page="/403.do"> <security:form-login login-page="/login.do" login-processing-url="/loginProcess" default-target-url="/home.do" authentication-failure-url="/login.do?login_error=1" /> <!-- Aqui é definodo o url para fazer o logout --> <security:logout logout-url="/logout" logout-success-url="/login.do" /> <security:intercept-url pattern="/home/login/setLocale.do" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/home.do" access="IS_AUTHENTICATED_FULLY" /> <security:intercept-url pattern="/home/**" access="IS_AUTHENTICATED_FULLY" /> </security:http>
Sair(coloquei fora da tag “code” pois o href não fica visivel)

J

Mano minha conf. do applicationContext:

<http auto-config='true' access-denied-page="/login.jsp">
    <intercept-url pattern="/api/**" access="ROLE_USER" />
     <intercept-url pattern="/oauth/**" access="ROLE_USER" />
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

    <form-login authentication-failure-url="/login.jsp" default-target-url="index.jsp" login-page="/login.jsp" login-processing-url="/login.do"/>
    <logout logout-success-url="/" logout-url="/logout" invalidate-session="true"/>
  </http>

Mano o logout esta funcionado em parte,pq se eu tentar acessar qualquer pagina ele permite.
Está é a config.

que faz esta função certo??

A

Nessa linha você está especificando que para determinadas pastas ele pode estar como anonimo access="IS_AUTHENTICATED_ANONYMOUSLY"Só não entendi essa linha

&lt;form-login authentication-failure-url="/login.jsp" default-target-url="index.jsp" login-page="/login.jsp" login-processing-url="/login.do"/&gt; porque tem login.do e login.jsp?

J
Quando o login não for compativel com o do banco apresenta está pagina:
               <form-login authentication-failure-url="/login.jsp" 
    
      Quando  a pessoa  logar no sistema a pagina padrão sera essa:
              default-target-url="index.jsp"
      O nome da pagina de login 
              login-page="/login.jsp"
      Cara eu não sei realmente o que ela faz ma se tirar ela e tentar logar com um usuario que não existe ele me retorna um erro: 404 :?:  :?:  :?:  :?: 
           login-processing-url="/login.do"/>  
      Essa de logout que vc me passou
  <logout logout-success-url="/" logout-url="/logout" 
      Força o fechamento da sessão
     invalidate-session="true"/>  
</http>


Cara o q estiver errado pode corrigir mano pq eu quero apreender.

Criado 2 de janeiro de 2013
Ultima resposta 7 de jan. de 2013
Respostas 14
Participantes 3