Eu aprendi filtros antes, mas os filtros são para servlets e são usados nas botas SpringMVC e Spring. Eles não se sentem muito úteis em termos de funções.
Vamos aprender sobre os interceptores aqui.
1. A ordem de execução do interceptador
1. Conteúdo
2. Interceptador
No interceptador, adicionei três (primeiro, dois, terceiro), mas o conteúdo é quase o mesmo.
package org.elvin.boot.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class FirstInterceptor implementa o handlerInterceptor {@Override public boolean prehandle (httpServletRequest httpServletRequest, httpServletResponse httpServletResponse, objeto o) lança excepção {System.out.println ("FirstIntercetor pré -manipular"); retornar true; } @Override public void PostHandle (httpServletRequest httpServletRequest, httpServletResponse httpServletResponse, objeto o, modelAndview ModelAndView) lança exceção {System.out.println ("FirstIntercetor Posthandle); } @Override public void Aftercompletion (httpServletRequest httpServletRequest, httpServletResponse httpServletResponse, objeto o, exceção e) lança a exceção {System.out.println ("FirstInterIntercept apóscompleção"); }}O Prehandle retorna true antes que a execução a seguir continuará.
Registro interceptador:
pacote org.elvin.boot.interceptor; importar org.springframework.context.annotation.configuration; importar org.springframework.web.servlet.config.annotation.interceptregistry; importar; org.springframework.web.servlet.config.annotation.webmvcConfigureRAdApter; @ConfigurationPublic Class RegisterInterceptor Estende webmvcconfigureRadapter {@Override public void (intercetorRegistry)); Registry.AddIntercept (novo TwoInterceptor ()); Registry.Addintercept (novo terceiroInterceptor ()); super.addinterceptores (Registro); }}Para verificar a ordem de execução, o tymeleaf é usado aqui e, em seguida, as propriedades que passei em segundo plano foram acessadas em primeiro plano. Ao acessar, as informações serão impressas no console
pacote org.elvin.boot.pojo; livro de classe pública {nome da string privada; public String getName () {System.out.println ("View: book'Name Is" + Name); Nome de retorno; } public void setName (nome da string) {this.name = name; }}Controlador:
pacote org.elvin.boot.controller; importar org.elvin.boot.pojo.book; importar org.springframework.tereotype.controller; importar org.springframework.ui.model; importação org.springframework.web.bind.notation.memplation; org.springframework.web.bind.annotation.requestmapping;@controller@requestmapp ("primeiro") public class FirstController {private string controllerPath = "primeiro/"; @GetMapping ("Index") Public String Index (modelo modelo) {System.out.println ("Controller: FirstController Index fazendo ..."); Livro do livro = novo livro (); book.setName ("Spring Boot"); model.addattribute ("livro", livro); retornar controlerpath + "índice"; }}Visualizar:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> title </title> </weft> <body> <h1 th: text = "$ {book.name}"> </h1> </body> </html>Ao acessar o localhost: 8080/primeiro/índice, as informações de resposta serão emitidas no console.
Dessa forma, a ordem de execução de um único interceptador pode ser visto.
1. O método de pré -mão executado antes do método do controlador ser executado
2. Execute o método de ação do controlador
3. Depois de executar a ação, antes de analisar a vista (se houver), execute o método pós -pós -dendle do interceptador
4. Analise a visão
5. Após a análise, execute o método de pós -conclusão
Quando vários interceptores são registrados, a ordem de execução é mostrada na figura.
2. Interceptor implementa a verificação de permissão
Da mesma forma, adicione o interceptador de permissão primeiro
pacote org.elvin.boot.interceptor; importar org.elvin.boot.annotation.nologin; importar org.springframework.util.stringutils; importar org.springframework.web.method.handlermethod; import org.springframework.web.serr. org.springframework.web.servlet.modlandView; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpSinterRescent; Prehandle (solicitação httpServletRequest, resposta httpServletResponse, identificador de objeto) lança a exceção {handlermethod método = (handlermethod) handle; Classe <?> ControlerType = métod.getBeanType (); if (Method.getMethodannotation (nologin.class)! = null || controllertype.getannotation (nologin.class)! = null) {return true; } HttpSession Session = request.getSession (); String token = (string) session.getAttribute ("token"); if (! stringUtils.isEmpty (token)) {return true; } Response.sendRedirect ("/login/index"); retornar falso; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse HttpServletResponse, objeto o, exceção e) lança a exceção {}}Em seguida, registre o interceptador de permissão
pacote org.elvin.boot.interceptor; importar org.springframework.context.annotation.configuration; importar org.springframework.web.servlet.config.annotation.interceptregistry; importar; org.springframework.web.servlet.config.annotation.webmvcConfigureRAdApter; @ConfigurationPublic Class RegisterInterceptor Estende webmvcconfigureRadapter {@Override public void (intercetorGregistry))) super.addinterceptores (Registro); }}Adicione um controlador de login ao controlador, forneça a página de login e o método de logout
package org.elvin.boot.controller; importar org.elvin.boot.annotation.nologin; importar org.springframework.beans.factory.annotation.autowired; importação org.springframework.tereotype.controller; importação de org.sPringFramweb.webwork.webind.bind.bind.controller; importação.SPRINGRETRATH.WEB.WEB.BHEBROTYPETY.METTY.METPORTETION.METROTETIONSPRING.WEBROTY.MOTYPING.METPORTETY.SPRING.SPRER; org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.httpServletResponse; importar javax.servlet.http.httpsession;@nologin@controlador@requestmapping ("login) classe pública Logincontroller {@autowired private httpSertleTreQuest Solicy; @Autowired Private HttpServletResponse Resposta; private string controlerpath = "login/"; // @nologin @getMapping ("index") public String Index () {httpSession session = request.getSession (); session.setAttribute ("token", "token"); retornar controlerpath + "índice"; } // @nologin @PostMapping ("checkout") @ResponseBody public String checkout () {httpSession session = request.getSession (); session.setAttribute ("Token", NULL); retornar "ok"; }}Aqui, fiz uma anotação sem login, que pode ser adicionada ao controlador ou à ação.
pacote org.elvin.boot.annotation; importar java.lang.annotation.ElementType; importar java.lang.annotation.retention; importar java.lang.annotation.retEntionPolicy; import java.lang.annotation.target; @Target ({elegenttype.type.type.typpe ElementType.Method}) @Retention (RetentionPolicy.Runtime) Public @Interface nologin {}Nenhum conteúdo é necessário na anotação.
Página de login (a página de login aqui é apenas para logout; portanto, depois de visitar esta página, significa que o login é bem -sucedido).
<! Doctype html> <html xmlns: th = "http://www.thymeleaf.org"> <head> <meta charset = "utf-8"/> <title> title </title> </ad Head> <body> <div> <input Type = ""> "Titletout" Logout "idiot> </title> </head> <body> <div> <input Type =" ">") </titleout "idiot> </title> </ad> th: src = "@{/js/jQuery-1.11.1.js}"> </script> <script th: inline = "javascript"> $ (function () {$ (". Dados: {}, sucesso: function (res) {if (res == "OK") {alert ("Logout bem -sucedido"); }); </script> </body> </html>Método de demonstração de resultados:
No navegador, primeiro abra a página http: // localhost: 8080/login/index e depois acesse o http: // localhost: 8080/primeiro/índice página na nova guia.
Você descobrirá que, ao acessar o primeiro/índice, você pode acessá -lo.
Neste momento, na página de login/índice, clique no botão Logout, atualize a página First/Index e você irá para a página de login diretamente.
O exemplo acima explicações da inicialização da string e do interceptador personalizado é todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.