empaquetar com.skgxsn.blog_idea2017.service; importación com.skgxsn.blog_idea2017.po.User; pública interfaz UserService { Usuario CheckUser (String nombre de usuario, contraseña String); }
empaquetar com.skgxsn.blog_idea2017.service; importación com.skgxsn.blog_idea2017.dao.UserRepository; importación com.skgxsn.blog_idea2017.po.User; importación org.springframework.beans.factory.annotation.Autowired; importación org.springframework.stereotype.Service; @Service pública clase UserServiceImpl implementos UserService { @Autowired privada userRepository UserRepository; @ Override pública del usuario (nombre de usuario String, String contraseña) CheckUser { usuario Usuario = userRepository.findByUsernameAndPassword (nombre de usuario, contraseña); volver usuario; } }
empaquetar com.skgxsn.blog_idea2017.dao; importación com.skgxsn.blog_idea2017.po.User; importación org.springframework.data.jpa.repository.JpaRepository; pública interfaz UserRepository extiende JpaRepository <usuario, Long> { usuario (nombre de usuario, String contraseña) findByUsernameAndPassword; }
empaquetar com.skgxsn.blog_idea2017.web.admin; importación com.skgxsn.blog_idea2017.po.User; importación com.skgxsn.blog_idea2017.service.UserService; importación org.springframework.beans.factory.annotation.Autowired; importación org.springframework.stereotype.Controller; importación org.springframework.web.bind.annotation.GetMapping; importación org.springframework.web.bind.annotation.PostMapping; importación org.springframework.web.bind.annotation.RequestMapping; importación org.springframework.web.bind.annotation.RequestParam; importación org.springframework.web.servlet.mvc.support.RedirectAttributes; importarjavax.servlet.http.HttpSession; @Controller @RequestMapping ( "/ admin" ) pública clase LoginController { @Autowired privada UserService UserService; @GetMapping pública Cadena loginPage () { retorno "admin / login" ; } @PostMapping ( "/ login" ) pública de inicio de sesión String (Cadena @RequestParam nombre de usuario, contraseña @RequestParam cadena, HttpSession de sesión, atributos RedirectAttributes) { user user =userService.checkUser (nombre de usuario, contraseña); si (user =! nula ) { user.setPassword ( nula ); session.setAttribute ( "usuario" , el usuario); volver "admin / index" ; } Demás { attributes.addFlashAttribute ( "mensaje", "用户名和密码错误" ); volver "redirección: admin /" ; } } @GetMapping ( "/ cierre de sesión" ) pública de cierre de sesión de cuerdas (HttpSession sesión) { sesión.); volver "redirección: admin /" ; } }
< Div clase = "error ui mini-mensaje" > </ div > < div clase = "mini mensaje negativo ui" th: a menos = "$ {# strings.isEmpty (#messages)}" th: texto = "$ {# mensajes}" >用户名或密码错误</ div >
< Secuencia de comandos > $ ( ' .ui.form ' ) .Form ({ campos: { nombre de usuario: { indentifier: ' nombre de usuario ' , reglas: [{ tipo: ' vaciar ' , pronta: ' 请输入用户名' , }] } , contraseña: { indentifier: ' password ' , reglas: [{ tipo: 'vaciar ' pronta: ' Por favor, Introduzca la contraseña ' , }] } } }) </ script >
Paquete com.skgxsn.blog_idea2017.util; Importación del java.security.MessageDigest; Importación java.security.NoSuchAlgorithmException; públicos de clase MD5Utils { / ** * las clases de cifrado MD5 * @param STR cadena a encriptar * @return caracteres luego de unos pocos metros string * / pública estática código string (cadena str) { try { la MessageDigest MD = MessageDigest.getInstance ( "el MD5" ); md.update (str.getBytes ()); byte [] = byteDigest md.digest (); int I ; StringBuffer buf = nuevo StringBuffer ( "" ); para ( int offset = 0; el desplazamiento <byteDigest.length; compensar ++ ) { i = byteDigest [desplazamiento]; si (i <0 ) i + = 256 ; si (i <16 ) buf.append ( "0" ); buf.append (Integer.toHexString (i)); } // 32位加密 retorno buf.toString (); // 16位加密 // retorno buf.toString () subcadena (8, 24).; } Catch (NoSuchAlgorithmException e) { e.printStackTrace (); volver nula ; } } Pública estáticas vacíos principales (args String []) { System.out.println (código ( "123456" )); } }
empaquetar com.skgxsn.blog_idea2017.web.admin; importación org.springframework.stereotype.Controller; importación org.springframework.web.bind.annotation.GetMapping; importación org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping ( "/ admin" ) pública clase BlogController { @GetMapping ( "/ blog-list" ) pública () {String bloglist retorno "admin / blog-list" ; } }
// LoginInterceptor.java paquete com.skgxsn.blog_idea2017.Interceptor; importación org.springframework.web.servlet.handler.HandlerInterceptorAdapter; importación javax.servlet.http.HttpServletRequest; importación javax.servlet.http.HttpServletResponse; público de clase LoginInterceptor extiende HandlerInterceptorAdapter { @ Override pública booleano preHandle (HttpServletRequest solicitud, HttpServletResponse respuesta, el controlador de objeto) lanza la excepción { si (request.getSession (). getAttribute ( "usuario") ==nula ) { response.sendRedirect ( "/ admin" ); volver falsa ; } Devolver cierto ; } } // WecConfig.java paquete com.skgxsn.blog_idea2017.Interceptor; importación org.springframework.context.annotation.Configuration; importación org.springframework.web.servlet.config.annotation.InterceptorRegistry; importación org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration pública clase WebConfig extiende WebMvcConfigurerAdapter { @ Override públicos vacíos addInterceptors (registro InterceptorRegistry) { registry.addInterceptor ( nueva LoginInterceptor ()) .addPathPatterns ( "/ admin / **" ) .excludePathPatterns ( "/ admin" ) .excludePathPatterns ( "/ admin / login" ); } }