En la sección anterior, completamos la operación básica del carrito de compras, pero hay un problema: cuando el usuario hace clic para establecerse, debemos hacer un juicio de inicio de sesión para determinar si el usuario ha iniciado sesión. Si no ha iniciado sesión, primero debe dejar que el usuario inicie sesión. Esto usa la tecnología de filtros. El filtro intercepta específicamente las solicitudes de la página. Es similar al principio de un interceptor. El interceptor intercepta específicamente las solicitudes de acción, por lo que cada una tiene sus propios usos. Si es un salto de página directamente sin pasar por una acción, solo necesitamos escribir un interceptor. Si necesitamos saltar a una acción para el procesamiento, entonces tenemos que escribir un interceptor.
1. El principio del salto de inicio de sesión <Br /> Permítanme hablar primero sobre el principio de implementación: escriba un filtro y configure la URL que debe interceptarse en Web.xml. De esta manera, cuando la URL de solicitud del usuario cumple con la configuración, el filtro que escribimos será ejecutado. En el filtro, primero verificamos si hay un usuario iniciado en la sesión. Si no hay indicios de que no haya inicio de sesión, obtenga la URL y los parámetros de la página a los que el usuario desea acceder, vuelva a coserla en la URL y colóquela en la sesión, y luego redirige a la página de inicio de sesión, inicie sesión y salte al procesamiento de la acción, y después del procesamiento, salte a la URL guardada en la sesión, es decir, donde el usuario originalmente quería ir. Esto completa el salto de inicio de sesión.
2. Implementación de salto de inicio de sesión
Cuando se usa la página del carrito de compras real, hacemos clic en el pago y saltará automáticamente a la página de confirmación del pedido, de la siguiente manera:
Sin embargo, si el usuario no ha iniciado sesión en este momento, definitivamente no saltaremos directamente a la página de confirmación del pedido, por lo que tenemos que usar un filtro para bloquearlo y hacer un juicio. Vamos a escribir el filtro a continuación:
2.1 Implementación de filtros
La implementación del filtro necesita implementar la interfaz de filtro y sobrescribir tres métodos. De hecho, principalmente necesitamos sobrescribir a uno de ellos. como sigue:
Public Class UserFilter Implements Filter {@Override public void Destroy () {// TODO Método Generado automático Stub} @Override public void dofilter (ServletRequest Solicitud, respuesta ServletResponse, FilterChain Chain) lanza IOException, ServletException {httPserveRstequest req = (httpServletReChest) Solicitud; HttpservletResponse Res = (httpservletResponse) respuesta; // Determine si la sesión actual tiene información del usuario si (req.getSession (). GetAttribute ("user") == null) {// Guarde la dirección de URL que el cliente actual quiere ir a string gourl = req.getServletPath (); // Obtenga la dirección que el usuario quiere ir a String Param = req.getqueryString ();; // Obtener los parámetros transportados en la dirección if (param! = Null) {gourl = gourl + "?" + Param; // Vuelva a cerrar la dirección de solicitud + parámetros} // Guarde la dirección que el cliente actual desea acceder en la sesión req.getSession (). SetAttribute ("gourl", gourl); // Solicitud ilegal, salte a la página de inicio de sesión req.getSession (). SetAttribute ("Error", "Solicitud ilegal, ¡inicie sesión!"); res.sendedirect (req.getContextPath () + "/ulogin.jsp"); } else {// Si hay el siguiente filtro, salte, de lo contrario, vaya directamente a la página de destino. }} @Override public void init (FilterConfig config) lanza ServletException {// TODO Auto Generado Método STUB}} A juzgar por el código de implementación, el método Dofilter es principalmente diarrea. En el método, primero determine si hay información del usuario en la sesión actual. Si no, significa que no hay inicio de sesión. Luego, primero debe guardar la dirección y los parámetros de la URL en la dirección a la que el usuario desea ir, deletrearlo en una nueva URL y guardarla en la sesión, y luego redirigirlo a la página de inicio de sesión para dejar que el usuario inicie sesión. Si hay información del usuario en la sesión, significa que ha iniciado sesión y la liberación directamente a la página que el usuario desea ir.
Después de escribir Filtro, no olvide configurar la URL para filtrar en Web.xml, de la siguiente manera:
Entonces, los $ {shop} /user/confirm.jsp se filtrarán. A continuación, echemos un vistazo a la página de inicio de sesión. En realidad tiene dos cuadros, nombre de usuario y contraseña, que depende principalmente de a qué acción salta:
Vemos que salta al método de inicio de sesión en Useraction para ejecutar Logic. Aquí implementamos actividades de usuario:
2.2 Implementación de acción
En UserAction, primero hacemos un juicio de inicio de sesión, es decir, buscamos a los usuarios con el nombre de usuario y la contraseña en la base de datos. Si es exitoso, guarde al usuario en la sesión y luego devuélvalos un resultado y entregue a Struts2 para su procesamiento. El código es el siguiente:
@Controller ("UserAction") @Scope ("Prototype") Public ClassationAction extiende BASEACTION <SUHER> {public String Login () {// juicio de Model de sesión de Login = Userservice.Login (modelo); if (model == null) {session.put ("error", "inicio de sesión fallido"); devolver "Iniciar sesión"; } else {// Iniciar sesión con éxito, primero almacene el usuario en la sesión Session.put ("Usuario", Modelo); // Defiende el salto de la página en función de si el gourl en la sesión tiene un valor if (session.get ("gourl") == null) {return "índice"; // omita a la página de inicio} else {return "gourl"; }}}}Echemos un vistazo a la configuración en Struts.xml:
Debido a que tenemos el gourl en sesión, pero en struts.xml, no podemos obtener la sesión y luego los parámetros en el código Java, pero podemos sacarlo de la pila de valor. Lo anterior es el método para obtener datos de la pila de valor.
2.3 Iniciar sesión en el juicio de la capa de servicio
La capa de servicio es principalmente el método de inicio de sesión utilizado en la acción anterior, y la implementación es relativamente simple, de la siguiente manera:
// Interfaz de UserService Interface Public UserService extiende BaseService <Ser Usem> {// El usuario inicia sesión y devuelve el inicio de sesión de usuario público del usuario (usuario del usuario); } // UserServiceImpl implementaciones @Service ("UserService") Public Class UserServiceImpl extiende BaseServiceImpl <Seremil> implementa UserService {@Override Public User Login (User User) {String hql = "del usuario u donde u.login =: login y u.pass =: pasar"; return (user) getSession (). createQuery (hql) // .setstring ("login", user.getLogin ()) // .setString ("pass", user.getPass ()) // .uniqueresult (); }}Ok, entonces usamos filtros para realizar el juicio y el salto de inicio de sesión del usuario. Después de iniciar sesión, podemos saltar a la página de confirmación del pedido. El efecto es el siguiente:
Toda la prueba del proceso se ha completado y la función es normal. De hecho, podemos mejorarlo un poco más. De hecho, deberíamos hacer un juicio de inicio de sesión antes de agregarlo al carrito de compras. Es decir, la página del carrito de compras ya está en el estado de inicio de sesión, y aquí está la página de confirmación de pedidos para determinar el inicio de sesión. Sin embargo, si hacemos juicios antes de la página del carrito de compras, será difícil para nosotros usar el filtro. Tenemos que usar el interceptor, porque la solicitud de acción no es una página ordinaria al saltar a la página del carrito de compras. Al solicitar acciones, tenemos que usar el interceptor para interceptarlo. Vamos a mejorar esto más tarde. Ahora básicamente implementaremos las funciones aquí. De acuerdo, el juicio y el salto están terminados.
Dirección original: http://blog.csdn.net/eson_15/article/details/51425010
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.