后端j简单权限管理

前言

一个系统正常使用的话固然不会发生权限问题,可是总有那个不正常使用的状况发生。咱们不但愿随随便便一我的就能够对本应该管理员操做的东西操做,这时,咱们就应该加入权限判断。对非管理员的一些操做进行拦截。spring

过滤器

在后台进行相应前先进行判断,阻止一些非正常的请求。这让我想到了之前学的后台token过滤器。先过滤一些请求,再进行转发,调用控制器中的特定方法。
首先咱们来配置过滤器
首先咱们来启用过滤器扫描功能。咱们来到初始类,添加@ServletComponentScan注解,启用过滤器的扫描功能。而后新建一个过滤器类,加入@WebFiltrer注解来告诉spring,这是一个过滤器。数组

@WebFilter
public class PowerFilter extends HttpFilter {
}

权限判断

配置好过滤器后,咱们进行权限判断,原教程是进行token验证,可是咱们涉及权限,只但愿拦截一部分请求。
首先咱们获取请求的urlide

// 获取请求的url
String url = request.getRequestURI();
logger.info(url);

而后咱们统计须要拦截的url,也就是但愿只能管理员才能发出的请求。好比咱们的给做业判成绩,重置密码,还有对实验以及学生的增删改查操做。咱们先创建一个List<>容器,将咱们须要进行身份判断的url放到里面。url

List<String> powerUrls;
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    powerUrls.add("work/updateScore");
    powerUrls.add("item");
    powerUrls.add("user/resetPassword");
    powerUrls.add("Student");

而后咱们对于非管理员操做的的须要验证权限的url进行验证,对于无权限的请求抛出异常。
这里用到了Java加强for循环,感受有点像PHP的foreach循环。code

if (!workService.isTeacher()) {
    for (String powerUrl: powerUrls) {
        if (url.contains(powerUrl)) {
            throw new AccessDeniedException("无操做权限");
        }
    }
}

最后转发数据,开始调用控制器中的特定方法教程

logger.info("在控制器被调用之前执行");

// 转发数据。spring开始调用控制器中的特定方法
chain.doFilter(request, response);

logger.info("在控制器被调用之后执行");

补充

若是咱们想对一些url的特定请求方法进行拦截,咱们须要创建二维数组,同时存放url和请求方法,并同时进行判断。
若是咱们无但愿一个学生对其余学生的东西进行修改,咱们还应该加入对url参数值进行比较。这里request有一个getParameter("id")方法可以获取url里的id参数值。token

if (url.contains("/Student")) {
    if (request.getParameter("id") != studentService.getCurrentStudent().getId().toString()) {
        logger.info("已拦截2");
        throw new AccessDeniedException("无操做权限");
    }
}

总结

权限管理阻止一些非正常访问,避免其余人利用系统漏洞进行违规操做。这里我就按照本身的想法进行编写,固然会有更加简单规范的方法等着我去发掘。get

相关文章
相关标签/搜索