java权限拦截器
2023-06-13 09:11:52 时间
大家好,又见面了,我是你们的朋友全栈君。
SecurityInterceptor.java
package light.mvc.framework.interceptors;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import light.mvc.framework.constant.GlobalConstant;
import light.mvc.framework.tool.SessionInfo;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 权限拦截器
*
*/
public class SecurityInterceptor implements HandlerInterceptor {
private List<String> excludeUrls;// 不需要拦截的资源
public List<String> getExcludeUrls() {
return excludeUrls;
}
public void setExcludeUrls(List<String> excludeUrls) {
this.excludeUrls = excludeUrls;
}
/**
* 完成页面的render后调用
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
Exception exception) throws Exception {
}
/**
* 在调用controller具体方法后拦截
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object,
ModelAndView modelAndView) throws Exception {
}
/**
* 在调用controller具体方法前拦截
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
String requestUri = request.getRequestURI();
String contextPath = request.getContextPath();
String url = requestUri.substring(contextPath.length());
SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO);
//判断是否包含在菜单权限里
if ((url.indexOf("/admin/") > -1) || excludeUrls.contains(url)) {// 如果要访问的资源是不需要验证的
return true;
}
if ((sessionInfo == null) || (sessionInfo.getId() == null)) {// 如果没有登录或登录超时
request.setAttribute("msg", "您还没有登录或登录已超时,请重新登录,然后再刷新本功能!");
request.getRequestDispatcher("/error/noSession.jsp").forward(request, response);
return false;
}
if(!sessionInfo.getAccessAllList().contains(url)){
return true;
}
if (!sessionInfo.getAccessList().contains(url)) {// 如果当前用户没有访问此资源的权限
request.setAttribute("msg", "您没有访问此资源的权限!<br/>请联系超管赋予您<br/>[" + url + "]<br/>的资源访问权限!");
request.getRequestDispatcher("/error/noSecurity.jsp").forward(request, response);
return false;
}
return true;
}
}
spring-mvc.xml中增加配置
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="light.mvc.framework.interceptors.SecurityInterceptor">
<!-- 不需要权限验证的地址 -->
<property name="excludeUrls">
<list>
<value>/access/tree</value><!-- 首页左侧功能菜单 -->
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139497.html原文链接:https://javaforall.cn
相关文章
- [java] java全局变量 声明和定义[通俗易懂]
- java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- Java基础知识总结(超详细整理),java从入门到精通pdf「建议收藏」
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java控制台输入数组_Java控制台输入数组并逆序输出的方法实例
- java笛卡尔积算法_Java 笛卡尔积算法的简单实现
- 【说站】java上界通配符如何使用
- 【说站】java同步的使用条件
- 【说站】java中@SuppressWarnings是什么意思
- Java 零拷贝_java高性能编程
- Java遍历json_java处理json数据
- java开发工具Maven、Gradle和Ant(二)
- Java 中调用wget 的 例子详解编程语言
- Java实现基数排序详解编程语言
- Java中int和Integer的区别详解编程语言
- Java Servlet的request/response中文乱码问题的解决方案
- 数据库Java连接MySQL数据库实现数据添加(java添加mysql)
- 策略【Java实现Redis过期策略】(redisjava过期)
- Java过期处理中Redis的应用(redisjava过期)
- 使用Java连接MySQL实现查询功能(java连接mysql查询)
- 使用Java连接MSSQL数据库的方法及流程(mssqljava)
- 使用Java程序执行Linux指令:实现自动化操作(java执行linux命令)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- Java利用数组随机抽取幸运观众如何实现