java web常用权限方式,java web项目的几种权限控制方法
一、spring boot项目,使用@Configuration注入WebMvcConfigurer来实现拦截器
如:
@Configuration
public class HighersoftWebMvcConfig implements WebMvcConfigurer{
@Autowired
private AdminHandlerInterceptorAdapter adminHandlerInterceptorAdapter;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(adminHandlerInterceptorAdapter).addPathPatterns("/**");
//.excludePathPatterns("/swagger-resources/**", "/webjars/**");
}
}注意,spring boot项目Configuration才会生效。
拦截器的实现:
@Component
public class AdminHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
@Autowired
private AdminService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
final HandlerMethod handlerMethod = (HandlerMethod) handler;
final Class> clazz = handlerMethod.getBeanType();
final Method method = handlerMethod.getMethod();
if (clazz.isAnnotationPresent(ExcludeLoginVerify.class) || method.isAnnotationPresent(ExcludeLoginVerify.class)) {
return true;
}
if(!loginContextVerification(request)) {
throw new RuntimeException("亲,登录了才能操作呢。");
}
return true;
}
return true;
}
}二、如果不是spring boot,用的是spring mvc,那么也可用上面的拦截器。用以下xml来实现:
三、用spring的aop也可以实现:
如:
@Component
public class LoginContextAspect {
private static final Logger logger = LoggerFactory.getLogger(LoginContextAspect.class);
@Autowired
UserService userService;
@Autowired
CookieUtils cookieUtils;
@Pointcut("execution(* net.highersoft.xx.controller..*(..)) && && !@annotation(net.highersoft.xx.annotation.ExcludeLoginVerify)")
public void controllerMethodPointcut() {
}
/**
* 拦截器具体实现
*
* @param pjp
* @return JsonResult(被拦截方法的执行结果,或需要登录的错误提示。)
*/
@Around("controllerMethodPointcut()")
public Object Interceptor(ProceedingJoinPoint pjp) {
Object result = null;
Object[] args = pjp.getArgs();
for (Object arg : args) {
if (arg instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) arg;
//验证逻辑
if (!loginContextVerification(request)) {
result = new JsonResult(ResultCode.LOGINCONTEXT_ERROR, "登录状态验证错误,请重新登录!", null);
}
}
}
try {
if (result == null) {
// 一切正常的情况下,继续执行被拦截的方法
result = pjp.proceed();
}
} catch (Throwable e) {
logger.info("LoginContextAspect >> exception: ", e);
result = new JsonResult(ResultCode.ERROR, ResultMsg.ERROR);
}
return result;
}
private boolean loginContextVerification(HttpServletRequest request) {
String token = cookieUtils.getCookieValue(request, "token");
if (!StringUtils.isNullOrEmpty(token)) {
try {
Object user = userService.get(token);
if (user != null) {
UserInfo u = JSONObject.parseObject(user.toString(), UserInfo.class);
return true;
}
} catch (JedisException ex) {
logger.error(ex.getMessage());
}
}
return false;
}
}四、用javax.servlet.Filter也可以实现,老项目可能用的是这个。
如在web.xml加入:
urlFilter
net.highersoft.mstats.filter.UrlFilter
urlFilter
/*
那么url-pattern下的访问都要过Filter,这样也可以控制权限。
五,其它方式
shiro 可以控制得更细,但代码也多些。
struts 也可以配置拦截器,但很久没用了,没代码了。
java web常用权限方式,java web项目的几种权限控制方法相关推荐
- java开发常用技术,java项目经验面试
前言 关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展很快,即使是相同起点的人,经过几年的工作或学习,会迅速拉开极大的差距,所以技术人保持学习,提升自己,才能够扛得住不断上赶的后浪,也 ...
- java多线程的实现方式_JAVA多线程实现的三种方式
最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...
- java实现线程的方式_java多线程实现的四种方式
java多线程实现的四种方式1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口) 2.实现Runnable接口,重写run方法 3.实现Callable接口,重 ...
- java数组初始化的方式,java中初始化数组的方式有几种
java中初始化数组的方式有几种 发布时间:2020-06-01 16:12:45 来源:亿速云 阅读:153 作者:鸽子 三种初始化方式: 1.静态初始化:创建+赋值 2.动态初始化:先创建再赋值 ...
- java创建数组的方式_Java创建数组的几种方式总结
1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...
- Spring MVC之基于java config无xml配置的web应用构建
更多spring相关博文参考: spring.hhui.top 前一篇博文讲了SpringMVC+web.xml的方式创建web应用,用过SpringBoot的童鞋都知道,早就没有xml什么事情了,其 ...
- 1.1.3 以Self Host方式寄宿Web API
寄宿Web API不一定需要IIS的支持,我们可以采用Self Host的方式使用任意类型的应用程序(控制台.Windows Forms应用.WPF)作为宿主. 对于SelfHost这样一个空的控制台 ...
- 【Java中常用的集合类】
1.Java中集合框架图 2.List 和 Set 的区别? List , Set 都是继承自Collection 接口 List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重 ...
- Java开发常用包、接口和类
一.JDK中常用包 1.java.lang 这个是系统的基础类: 2.java.io 这里面是所有输入输出有关的类,比如文件操作等: 3.java.nio 为了完善 io 包中的功能,提高 io 包中 ...
最新文章
- mariadb 内存占用优化
- Python深度学习之分类模型示例,MNIST数据集手写数字识别
- 网络对抗技术_实验二_网络嗅探与欺骗
- java 加减运算_JAVA日期加减运算 | 学步园
- 云闪付单个红包最高2018,这是要打败支付宝的节奏吗?
- linux find查找文件然后删除,linu查找find命令及删除7天前的文件
- iOS中Runtime简析
- Uber新CEO的第一把火:停止运营Xchange Leasing租车业务
- 高并发系统数据幂等性
- 初学者 | 分词的那些事儿
- ca 手机抓包_手机 https 抓包---Charles篇
- PC微信小程序突然Charles抓不到包
- Ghost XP SP2 64位 纯净珍藏版
- 将数字转为ASCII码
- 深入理解计算机系统03——程序的机器级表示
- 三,python基础初识。
- 你知道国内有哪些网站提供免费的云服务器吗
- Tektronix泰克MDO3054示波器
- IDEA Android开发 连接华为手机调试
- Apache web服务器目录结构、发布网站