javascript
用户登录(使用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:
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
4、Service層:
功能接口:
UserService.java:
實現類:
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以上。
7、配置通知–使用log4j登記用戶登錄信息
切點方法使用Service層的實現類中的登錄信息查詢方法,上述ApplicationContext.xml配置文件中有切點和通知方法的配置及對象創建;
此處只介紹log4j配置文件及通知方法的編寫。
7.1、log4j配置文件:
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
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记录登录日志)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚基类的作用
- 下一篇: Springboot 项目整合自定义日志