使用spring拦截器与自定义注解进行登录拦截

本文介绍如何使用SpringMVC实现基于注解的登录检查功能,包括自定义注解、拦截器实现及配置。

1.依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>

 

2.自定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LoginCheck {
    boolean check() default false;
}

3.继承spring的HandlerInterceptor接口实现了里面的的方法:

在拦截器中需要加入注解的逻辑

public class LoginInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("进入拦截器");

        //1.判断是否存在注解
        if(!(handler instanceof HandlerMethod)){
            return true;
        }
        HandlerMethod method = (HandlerMethod)handler;
        boolean hasLoginAnnotation=method.getMethod().isAnnotationPresent(LoginCheck.class);
        if(!hasLoginAnnotation){
            //不存在LoginRequired注解,则直接通过
            return true;
        }
        LoginCheck loginCheck=method.getMethod().getAnnotation(LoginCheck.class);
        //2.required=false,则无需检查是否登录
        if(!loginCheck.check()){
            return true;
        }
        Object user = httpServletRequest.getSession().getAttribute("user");
        if (user != null) {
            return true;
        }
        //3.登录状态检查,使用response返回指定信息
        //response.getWriter().append("you need login!");
        response.sendRedirect("http://localhost:8081");
        return false;
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

4.在springmvc的配置文件中配置拦截器:

<!--设置拦截器-->
<mvc:interceptors>
   <mvc:interceptor>
   <mvc:mapping path="/**"/>
   <bean class="com.common.checked.LoginInterceptor"/>
   </mvc:interceptor>
</mvc:interceptors>

5.在Controller的方法中加入自定义注解:

@LoginCheck(check = true)
@RequestMapping("buy")
public String buy(Integer id, Integer num) {
    System.out.println("进入到buy方法");
    System.out.println("id"+id+"num"+num);
    return "index";
}

在方法上面加@LoginCheck(check = true)注解时拦截器会判断用户是否登录,登录则进入方法,否则重定向到登录页面。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值