後端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

相關文章
相關標籤/搜索