过滤器匹配

简介: 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;
    }
    // 做鉴权
    ......
}

}

相关文章
|
4月前
|
XML Java 数据库连接
引入MybatisPlus的起步依赖
MyBatisPlus官方提供了一站式Starter,集成MyBatis与MyBatisPlus全部功能,支持自动装配,可直接替代原生MyBatis依赖。引入`mybatis-plus-boot-starter`后,无需额外配置,简化开发流程,原MyBatis依赖可移除,提升效率。
|
4月前
|
安全 API
SimpleDateFormat不要定义为static
SimpleDateFormat线程不安全,避免定义为static,若需静态使用应加锁或采用ThreadLocal。推荐JDK8新时间API:Instant、LocalDateTime、DateTimeFormatter,具有线程安全、简洁、不变性等优点。
|
4月前
|
Java
Arrays.asList之后不要调用修改操作
`Arrays.asList()`返回的列表不可直接增删元素,因其底层为固定大小的内部类,调用`add/remove`会抛出`UnsupportedOperationException`;且列表与原数组共享数据,修改数组内容会影响列表。
|
4月前
|
缓存 安全 Java
线程池初始化严禁使用Executors
阿里巴巴规范禁止使用Executors创建线程池,因其默认队列无界(如LinkedBlockingQueue)或线程数过多,易导致OOM。推荐使用ThreadPoolExecutor自定义参数,或结合Guava工具设置有界队列、合理线程数及拒绝策略,避免内存溢出并提升可维护性。
|
4月前
|
存储
初始化Map大小并非用多少指定多少
初始化HashMap时,指定容量并非直接生效,而是会调整为最近的2的幂次(如1变2、3变4)。为避免扩容开销,建议使用Guava的Maps.newHashMapWithExpectedSize(),或手动按公式:容量 = 预期元素数 / 0.75 + 1 进行设置,提升性能。
|
4月前
|
NoSQL MongoDB
集合的显式创建
MongoDB中使用`db.createCollection(name)`创建集合,name为集合名称,不可为空或含\0、system.开头及保留字符如$。查看当前库表可用`show collections`或`show tables`。命名需遵循规范,避免系统保留字符。
|
4月前
|
存储 NoSQL MongoDB
选择和创建数据库
MongoDB中使用`use 数据库名`选择或创建数据库,若不存在则自动创建;`show dbs`查看所有数据库;`db`查看当前库。集合需插入数据后才真正创建。数据库名需为非空小写UTF-8字符串,不含特殊字符,最长64字节。保留库包括admin(权限管理)、local(本地存储)和config(分片配置)。
|
4月前
|
NoSQL MongoDB 数据库
数据库的删除
MongoDB删除数据库语法为:db.dropDatabase(),用于移除已持久化的数据库,执行后将永久删除当前数据库及其中所有数据,请谨慎操作。
|
4月前
|
SQL
理论分析
MyBatisPlus通过Wrapper条件构造器支持丰富查询,继承BaseMapper即可使用常用方法。AbstractWrapper定义eq、like、between等条件,QueryWrapper可指定查询字段减少IO开销,UpdateWrapper用于更新特定字段,提升SQL性能。
Service接口
MP提供了更高效的Service层方法,如批量增删改查、分页等。使用时需继承IService接口及ServiceImpl实现类,遵循其规范,提升开发效率,避免重复编写Mapper层代码,实现更优雅的业务逻辑封装。(239字)

热门文章

最新文章

下一篇
开通oss服务