Java Web检查用户登录状态(防止用户访问到非法页面)

 更新时间:2023年09月01日 16:27:13   作者:Katniss的名字被占用  
一般javaweb网站都有用户登录,而有一些操作必须用户登录才能进行,本文主要介绍了Java Web检查用户登录状态,具有一定的参考价值,感兴趣的可以了解一下

使用拦截器

  • 在方法前标注自定义注解
  • 拦截所有请求,只处理带有该注解的方法

自定义注解:

  • 常用元注解:@Target@Rentention@Document@Inherited
  • 如何读取注解:
    Method.getDeclaredAnnotations()Method.getAnnotaion(Class<T> annotationClass)

业务场景:未登陆状态下,用户不能访问需要登陆才能访问的页面,例如修改个人信息页面等。

1. 自定义注解

package com.nowcoder.community.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}

2. 在方法前加上该注解

@LoginRequired
@RequestMapping(path = "/setting",method = RequestMethod.GET)
public String getSettingPage(){
    return "/site/setting";
}

3. 定义拦截器

package com.nowcoder.community.controller.Interceptor;
import com.nowcoder.community.annotation.LoginRequired;
import com.nowcoder.community.entity.User;
import com.nowcoder.community.util.HostHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
@Component
public class LoginRequireInterception implements HandlerInterceptor {
    @Autowired
    private HostHolder hostHolder;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(handler instanceof HandlerMethod) {  // 拦截到类型为方法
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            Method method = handlerMethod.getMethod();  // 获取方法
            LoginRequired loginRequired = method.getAnnotation(LoginRequired.class);  // 获取方法的注解
            if (loginRequired != null && hostHolder.getUser() == null) {  // 方法是loginRequired且user没登陆,需要拦截
                response.sendRedirect(request.getContextPath() + "/login");
                return false;
            }
        }
        return true;
    }
}

4. 配置拦截器

package com.nowcoder.community.config;
import com.nowcoder.community.controller.Interceptor.AlphaInterceptor;
import com.nowcoder.community.controller.Interceptor.LoginRequireInterception;
import com.nowcoder.community.controller.Interceptor.LoginTicketInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    private AlphaInterceptor alphaInterceptor;
    @Autowired
    private LoginTicketInterceptor loginTicketInterceptor;
    @Autowired
    private LoginRequireInterception loginRequireInterception;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 通过重写addInterceptors()方法,可以配置拦截器,对请求进行预处理或后处理。
        registry.addInterceptor(loginRequireInterception)
                .excludePathPatterns("/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg", "/**/*.jpeg");
    }
}

 到此这篇关于Java Web检查用户登录状态(防止用户访问到非法页面)的文章就介绍到这了,更多相关Java 检查用户登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 深入浅析java中flyway使用简介

    深入浅析java中flyway使用简介

    Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。这篇文章主要介绍了flyway使用简介,需要的朋友可以参考下
    2020-07-07
  • 猜数游戏java实现代码

    猜数游戏java实现代码

    这篇文章主要为大家详细介绍了java实现猜数游戏代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 五分钟手撸一个Spring容器(萌芽版)

    五分钟手撸一个Spring容器(萌芽版)

    Spring的两大内核分别是IOC和AOP,其中最最核心的是IOC。这篇文章主要介绍了五分钟,手撸一个Spring容器的相关知识,需要的朋友可以参考下
    2022-03-03
  • java实现窗口刷新的示例代码

    java实现窗口刷新的示例代码

    本文主要介绍了java实现窗口刷新的示例代码,通过重写paintComponent()方法和调用repaint()方法,可以实现窗口的即时刷新,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • SpringBoot集成Flink-CDC实现对数据库数据的监听问题

    SpringBoot集成Flink-CDC实现对数据库数据的监听问题

    Flink CDC(Flink Change Data Capture)是一种基于数据库日志的CDC技术,它实现了一个全增量一体化的数据集成框架,这篇文章主要介绍了SpringBoot集成Flink-CDC,实现对数据库数据的监听,需要的朋友可以参考下
    2024-07-07
  • spring cloud实现Eureka注册中心的HA的方法

    spring cloud实现Eureka注册中心的HA的方法

    本篇文章主要介绍了spring cloud实现Eureka注册中心的HA的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 解读System.getProperty("ENM_HOME")中的值从哪获取的

    解读System.getProperty("ENM_HOME")中的值从哪获取的

    这篇文章主要介绍了解读System.getProperty("ENM_HOME")中的值从哪获取的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中的深拷贝和浅拷贝介绍

    Java中的深拷贝和浅拷贝介绍

    对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据。Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)、延迟拷贝(Lazy Copy)
    2014-03-03
  • 深入解析Java编程中接口的运用

    深入解析Java编程中接口的运用

    这篇文章主要介绍了Java编程中接口的运用,接口是Java面向对象的继承特性的体现,需要的朋友可以参考下
    2015-10-10
  • Java线程安全基础概念解析

    Java线程安全基础概念解析

    这篇文章主要介绍了Java线程安全基础概念解析,希望给大家一个参考,需要的朋友可以了解下。
    2017-09-09

最新评论