ssm整合时,springmvc拦截器能实现细颗粒权限访问么,当用户没有权限时,通过URL访问网页会跳回登录或者跳到错误页面
3条回答 默认 最新
- 王壹浪 2018-02-26 11:52关注
代码如下:
第一步:创建SpringMVC拦截器,拦截所有需要进行权限验证的功能请求
?
<mvc:annotation-driven> <!-- 静态资源访问 --> <mvc:resources mapping="/static/**" location="/static/"> <!-- 拦截器 --> <mvc:interceptors> <!-- 多个拦截器,顺序执行 --> <mvc:interceptor> <!-- 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/**"> <!-- 在Freemarker界面展示之前做一些通用处理 --> <bean class="xx.xxxx.core.web.FreeMarkerViewInterceptor"></bean> </mvc:mapping> </mvc:interceptor> </mvc:interceptors></mvc:resources></mvc:annotation-driven>
第二步:创建作用于Method级别的Annotation类,用于传入功能ID
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Permission {/** * 功能ID,该功能ID,对应数据库中的功能ID * @return * @version V1.0.0 * @date Jan 13, 2014 4:59:35 PM */ String value();
}
第三步:通过静态常量建立数据库中的功能ID与执行方法的一对一关系
?
public class FuncConstants {
/** * 系统管理-角色管理-增加角色 */ public final static String Xtgl_Jsgl_AddJs = "4399d98bb0d84114acb5693081e83bc9"; /** * 系统管理 - 部门管理- 部门列表 */ public final static String Xtgl_Bmgl_BmList = "dbc4bf80f8b6418788b79de204d37932";
}
第四步:在SpringMVC拦截器中验证权限
/**
- FreeMarker视图拦截器,页面展示之前做一些通用处理
- @version V1.0.0
-
@date Dec 12, 2013 4:20:04 PM
*/
public class FreeMarkerViewInterceptor extends HandlerInterceptorAdapter {public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView view) throws Exception {
String contextPath = request.getContextPath();
if (view != null) {
request.setAttribute("base", contextPath);
}
}public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//处理Permission Annotation,实现方法级权限控制 HandlerMethod method = (HandlerMethod)handler; Permission permission = method.getMethodAnnotation(Permission.class); //如果为空在表示该方法不需要进行权限验证 if (permission == null) { return true; } //验证是否具有权限 if (!WebUtil.hasPower(request, permission.value())) { response.sendRedirect(request.getContextPath()+"/business/nopermission.html"); return false; } return true; //注意此处必须返回true,否则请求将停止 //return true;
}
}
至此,基于按钮、方法验证的细粒度权限体系完成!
解决 无用评论 打赏 举报
悬赏问题
- ¥15 彩灯控制电路,会的加我QQ1482956179
- ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
- ¥15 (关键词-电路设计)
- ¥15 如何解决MIPS计算是否溢出
- ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
- ¥15 操作系统相关算法中while();的含义
- ¥15 CNVcaller安装后无法找到文件
- ¥15 visual studio2022中文乱码无法解决
- ¥15 关于华为5g模块mh5000-31接线问题
- ¥15 keil L6007U报错