过滤器匹配

简介: UserLoginInterceptor 是一个基于Spring的登录拦截器,通过注解@Login控制接口访问权限。若方法标记为无需登录则放行,否则进行用户鉴权,结合Redis实现会话管理,确保接口安全访问。(236字符)

package com.zhicall.majordomo.core.security.interceptor;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;

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

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.alibaba.fastjson.JSON;
import com.zhicall.care.realtime.util.ResultMessageBuilder;
import com.zhicall.care.realtime.util.ResultMessageBuilder.ResultMessage;
import com.zhicall.care.system.basic.BeanFactory;
import com.zhicall.majordomo.core.common.constant.GlobalCst;
import com.zhicall.majordomo.core.common.enums.YesOrNo;
import com.zhicall.majordomo.core.security.annotation.Login;
import com.zhicall.majordomo.core.security.constant.Cst;
import com.zhicall.majordomo.core.security.util.UserAuthHelper;

public class UserLoginInterceptor extends HandlerInterceptorAdapter {

@SuppressWarnings({ "unchecked", "rawtypes" })
protected RedisTemplate<String, String> redisTemplate = (RedisTemplate) BeanFactory.getInstance().getBean("redisTemplate");

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Login login = handlerMethod.getMethodAnnotation(Login.class);
    // 方法被 @Login(YesOrNo.No)标记 表示不需要登陆即可访问 否者都要登录
    if (login != null && YesOrNo.NO.equals(login.value())) {
        return true;
    }
    // 做鉴权
    ......
}

}

相关文章
|
2月前
|
XML Java 数据库连接
引入MybatisPlus的起步依赖
MyBatisPlus官方提供了一站式Starter,集成MyBatis与MyBatisPlus全部功能,支持自动装配,可直接替代原生MyBatis依赖。引入`mybatis-plus-boot-starter`后,无需额外配置,简化开发流程,原MyBatis依赖可移除,提升效率。
业务架构图中的核心元素
绘制业务架构图时,开发人员应淡化技术细节,聚焦业务逻辑。优秀的架构图需具备:清晰的模块边界、功能抽象标准化、上下游分层明确,确保可迭代优化,提升产品可维护性与扩展性。
|
2月前
|
开发框架 微服务
应用架构图
在业务架构基础上,技术架构将应用需求转化为技术实现,涵盖分层设计、开发语言与框架选择,及非功能需求的技术方案。结合微服务或单体架构分层模型,明确各层技术选型,形成关键技术清单与完整架构图,实现产品到技术的落地。
|
2月前
|
存储
单体应用架构
单体应用架构传统分为四层:数据层负责存储,业务层处理逻辑,表现层实现用户交互,通用层提供公共组件,各层协同工作,结构清晰,适用于中小型系统开发与维护。
|
2月前
|
数据挖掘
展现层
展现层是用户与系统交互的入口,面向实操、管理、决策三层用户提供差异化服务:实操层侧重功能执行,管理层聚焦运营数据分析,决策层提供经营诊断与决策支持,实现精准化信息呈现与操作支撑。
业务层
业务层按功能模块细化产品架构,将交付模块分解为最细粒度的功能单元,精准对应日常业务操作,实现业务逻辑的全面结构化,确保系统功能与实际需求高度契合。(238字)
|
2月前
|
存储 NoSQL 关系型数据库
数据层
数据层依据应用数据模型,采用关系型数据库、NoSQL及分布式文件系统等多样化存储介质,实现高效、灵活的数据存储与管理。
分布式应用架构
分布式应用架构图展示产品内部及外部应用间的调用逻辑,体现SOA架构下各应用的服务交互关系。重点呈现应用间的通信路径与依赖,清晰反映产品在整体业务中的定位与影响,不包含服务注册、治理等RPC底层细节。
外部系统调用关系
数据输入主要来自外部系统,需按业务属性和来源关系归类,并整合至应用架构。数据输入与输出为整体,输出系统亦属产品重要组成部分,应一并纳入架构图中,确保体系完整与协同高效。
|
2月前
|
存储 关系型数据库 MySQL
业务应用场景
传统关系型数据库(如MySQL)难以满足“三高”需求:高并发读写、海量数据高效存取,以及高可扩展性与高可用性,尤其在Web2.0时代面临性能与扩展瓶颈。