springMVC :HandlerInterceptorAdapter + 自定义注解 实现用户登入 的请求拦截器

sept1 自定义注解

                      @retention :Retention(保留)注解说明,这种类型的注解会被保留到哪个阶段. 有三个值{
1).RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略 
2).RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略 

3).RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他

                            使用反射机制的代码所读取和使用}

      @Documented :注解表明这个注解应该被 javadoc工具记录

 

      @Target :注解使用的范围 : method ,parameter...

 

demo:

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;


@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface isLogin {

}

注:在需要校验用户登入信息的接口上,controlle的方法上添加自定义的注解。

sept2 HandlerInterceptorAdapter 拦截器的实现

拦截器判断controller的函数上,是否配置自定义的登入拦截注解,有则进行是否登入的校验

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class LoginInterceptor extends HandlerInterceptorAdapter {
//继承HandlerInterceptorAdapter 重写preHandler方法


/**
* This implementation always returns {@code true}.
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// handlerMethod封装方法定义相关的信息,如类,方法,参数等
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 获取方法上的注解
isLogin isLogin = handlerMethod.getMethodAnnotation(isLogin.class);
// 没有islogin的注解就不判断
if (isLogin == null) {
return true;
}
else {
// TO DO : 判断session中是否有的用户信息(返回true后者false)
}
return true;
}
}
 

xml配置:

   

    <mvc:interceptors>
        <bean class="mystudy.base.LoggedinInterceptor" />
    </mvc:interceptors>

     <bean id="handlerMapping" 

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

 

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现用户的登录和登出日志需要进行以下步骤: 1. 在数据库中创建用户表和日志表,可以使用MySQL Workbench或其他工具来进行创建。 2. 在Spring MVC中创建登录和登出的Controller,并在Controller中调用相应的Service来进行业务逻辑处理。 3. 在Service中调用Hibernate的DAO层来操作数据库,实现用户的登录和登出功能,并将登录和登出的日志信息保存到日志表中。 4. 在Hibernate的DAO层中,使用Hibernate的API来操作数据库,在DAO层中创建用户和日志的实体类,并且使用Hibernate的注解来映射实体类和数据库表之间的关系。 5. 在日志表中记录用户的登录和登出信息,包括用户ID、用户名、登录时间、登出时间等信息。 6. 在Spring MVC中配置日志拦截器,在用户登录和登出时记录日志信息。 示例代码如下: User实体类: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "username") private String username; @Column(name = "password") private String password; // getters and setters } ``` Log实体类: ``` @Entity @Table(name = "log") public class Log { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "user_id") private Long userId; @Column(name = "username") private String username; @Column(name = "login_time") private Date loginTime; @Column(name = "logout_time") private Date logoutTime; // getters and setters } ``` UserDAO接口: ``` public interface UserDAO { User getUserByUsernameAndPassword(String username, String password); } ``` UserDAO实现类: ``` @Repository public class UserDAOImpl implements UserDAO { @Autowired private SessionFactory sessionFactory; @Override public User getUserByUsernameAndPassword(String username, String password) { Session session = sessionFactory.getCurrentSession(); Query<User> query = session.createQuery("from User where username=:username and password=:password", User.class); query.setParameter("username", username); query.setParameter("password", password); return query.uniqueResult(); } } ``` LogDAO接口: ``` public interface LogDAO { void saveLog(Log log); } ``` LogDAO实现类: ``` @Repository public class LogDAOImpl implements LogDAO { @Autowired private SessionFactory sessionFactory; @Override public void saveLog(Log log) { Session session = sessionFactory.getCurrentSession(); session.save(log); } } ``` UserService接口: ``` public interface UserService { User login(String username, String password); void logout(Long userId); } ``` UserServiceImpl实现类: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; @Autowired private LogDAO logDAO; @Override public User login(String username, String password) { User user = userDAO.getUserByUsernameAndPassword(username, password); if (user != null) { Log log = new Log(); log.setUserId(user.getId()); log.setUsername(user.getUsername()); log.setLoginTime(new Date()); logDAO.saveLog(log); } return user; } @Override public void logout(Long userId) { Log log = new Log(); log.setUserId(userId); log.setLogoutTime(new Date()); logDAO.saveLog(log); } } ``` LoginController: ``` @Controller public class LoginController { @Autowired private UserService userService; @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(@RequestParam String username, @RequestParam String password, HttpSession session) { User user = userService.login(username, password); if (user != null) { session.setAttribute("user", user); return "redirect:/home"; } else { return "login"; } } @RequestMapping(value = "/logout", method = RequestMethod.GET) public String logout(HttpSession session) { User user = (User) session.getAttribute("user"); if (user != null) { userService.logout(user.getId()); session.removeAttribute("user"); } return "redirect:/"; } } ``` LogInterceptor: ``` @Component public class LogInterceptor extends HandlerInterceptorAdapter { @Autowired private UserService userService; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); if (user != null) { userService.logout(user.getId()); } } } ``` 在Spring MVC配置文件中配置LogInterceptor: ``` <mvc:interceptors> <bean class="com.example.interceptor.LogInterceptor"/> </mvc:interceptors> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值