日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

用户登录(使用Spring AOP记录登录日志)

發布時間:2024/3/12 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户登录(使用Spring AOP记录登录日志) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、Spring配置文件解析:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!--配置數據庫連接信息--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!--創建工廠類方法--><bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><!--掃描實體類對象,為實體類對象起一個別名--><property name="typeAliasesPackage" value="Model"></property></bean><!--配置掃描映射文件接口--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="Mapper"></property><property name="sqlSessionFactory" ref="factory"></property></bean><!--配置使用cglib動態代理,使用功能接口userService接收代理對象UserImpl對象--><aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy><!--創建實現類對象并注入dao層接口映射--><bean id="userImpl" class="Service.Impl.UserImplService"><property name="userLogin" ref="IUserLogin"></property></bean><!--創建通知對象--><bean id="before" class="Advisor.beforeAdvisor"></bean><bean id="after" class="Advisor.after"></bean><aop:config><aop:pointcut id="user" expression="execution(* Service.Impl.UserImplService.findUserInfoByUser(..))"></aop:pointcut><aop:advisor advice-ref="before" pointcut-ref="user"></aop:advisor><aop:advisor advice-ref="after" pointcut-ref="user"></aop:advisor></aop:config> </beans>

此處新使用了一個配置,即在創建SqlSessionFactory工廠類對象時,使用類中參數typeAliasesPackage()掃描封裝實體類的包,給包下的封裝實體類起了一個別名(類名的首字母小寫)。

2、持久層映射文件

2.1、接口映射文件
IUserLogin.java:

package Mapper;import Model.User;public interface IUserLogin {/*** 查詢用戶信息*/User queryUserInfoByUser(User user); }

2.2、SQL映射文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="Mapper.IUserLogin"><!--type="user" : User封裝實體類別名--><resultMap id="resultUser" type="user"><id property="id" column="id"></id><result property="userName" column="username"></result><result property="passWord" column="password"></result><result property="sex" column="sex"></result><result property="birthday" column="birthday"></result><result property="address" column="address"></result></resultMap><select id="queryUserInfoByUser" parameterType="user" resultMap="resultUser">select * from user where #{userName} = username and password = #{passWord}</select> </mapper>

3、封裝實體類:
User.java

package Model;import java.util.Date;public class User {private int id;private String userName;private String passWord;private Date birthday;private char sex;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", passWord='" + passWord + '\'' +", birthday=" + birthday +", sex=" + sex +", address='" + address + '\'' +'}';} }

4、Service層:
功能接口:
UserService.java:

package Service; import Model.User;public interface UserService {User findUserInfoByUser(User user); }

實現類:

package Service.Impl;import Mapper.IUserLogin; import Model.User; import Service.UserService;public class UserImplService implements UserService {private IUserLogin userLogin;public IUserLogin getUserLogin() {return userLogin;}public void setUserLogin(IUserLogin userLogin) {this.userLogin = userLogin;}@Overridepublic User findUserInfoByUser(User user) {return userLogin.queryUserInfoByUser(user);} }

5、web.xml配置讀取ApplicationConext.xml配置文件的監聽

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:ApplicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> </web-app>

此處需要注意的需要使用Spring-web包中的監聽類,在標簽中配置schema相關信息,頭信息<?xml version="1.0" encoding="UTF-8"?>不能缺失;上下文配置中,值一定是contextConfigLocation。

6、Servlet類代碼:
一定要記得繼承HttpServlet ,重寫service方法、init()方法,init()初始化方法中獲取Spring配置文件信息;service方法可以接收Post、get請求,獲取、處理請求數據,和服務端相應數據。
在Servlet類前 使用@WebServlet("/…"),指定訪問路徑,注解的使用需要保障tomcat版本在7以上,web在3.0以上。

package Servlet;import Model.User; import Service.Impl.UserImplService; import Service.UserService; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/login") public class UserLoginServlet extends HttpServlet {private UserService userService;/*** 重寫初始化方法* @throws ServletException*/@Overridepublic void init() {WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());userService = wac.getBean("userImpl",UserImplService.class);}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {User user = new User();req.setCharacterEncoding("UTF-8");user.setUserName(req.getParameter("username"));user.setPassWord(req.getParameter("password"));User u = userService.findUserInfoByUser(user);if(u != null){resp.sendRedirect("main.jsp");}else{resp.sendRedirect("index.jsp");}} }

7、配置通知–使用log4j登記用戶登錄信息
切點方法使用Service層的實現類中的登錄信息查詢方法,上述ApplicationContext.xml配置文件中有切點和通知方法的配置及對象創建;
此處只介紹log4j配置文件及通知方法的編寫。

7.1、log4j配置文件:

log4j.rootCategory=INFO, CONSOLE ,LOGFILElog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%m %nlog4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=E:/Idea/Spring.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%m %n

7.2、前置通知配置:

package Advisor;import Model.User; import org.apache.log4j.Logger; import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method; import java.util.Date;public class beforeAdvisor implements MethodBeforeAdvice {@Overridepublic void before(Method method, Object[] objects, Object o) throws Throwable {//Log4JLogger log = new Log4JLogger(String.valueOf(beforeAdvisor.class));User user = (User) objects[0];// log.info(user.getUserName()+"登錄系統");Logger log = Logger.getLogger(beforeAdvisor.class);log.info("用戶 "+user.getUserName()+" 在"+new Date() +"時登錄系統!!!");} }

7.3、后置通知配置:

package Advisor; import Model.User; import org.apache.log4j.Logger; import org.springframework.aop.AfterReturningAdvice; import java.lang.reflect.Method; import java.util.Date; public class after implements AfterReturningAdvice {@Overridepublic void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {User user = (User) o;Logger log = Logger.getLogger(after.class);log.info("用戶 "+user.getUserName()+" 在"+new Date() +"成功登錄系統!!!");} }

8、登錄頁面(index.jsp)及登錄成功跳轉頁面(main.jsp)
index.jsp

<%@page language="java" contentType="text/html; UFT-8" pageEncoding="UTF-8" %> <html> <body> <h2>用戶登錄頁面</h2> <hr> <form action="login" method="post"><table border="1" align="center"><tr align="center"><td align="center" style="font-size: 20px;">登錄名:</td><td align="center" style="text-align: center"><input type="text" name="username" style="text-align: center;width: 180px;"/></td></tr><tr align="center"><td align="center" style="font-size: 20px;">密碼:</td><td align="center"><input type="text" align="center" name="password" style="text-align: center;width: 180px;"/></td></tr><tr><td colspan="2" align="center"><input type="submit" value="登錄" align="center" style="font-size: 25px;"/><input type="reset" value="取消" align="center" style="font-size: 25px;"/></td></tr></table> </form> </body> </html>

main.jsp:

<%--Created by IntelliJ IDEA.User: xingfuhuDate: 2020/4/23Time: 21:40To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body><h3>登陸成功!!!</h3> </body> </html>

9、開發所需包及IDEA手動導包處理注意事項
包:


導包步驟:
8.1、File – Project Structrue – Artifacts

Output Layout – Web-INF – lib --Add Copy of – Libray Files

總結

以上是生活随笔為你收集整理的用户登录(使用Spring AOP记录登录日志)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。