1. 程式人生 > >Spring Boot 整合Shiro攔截Ajax請求

Spring Boot 整合Shiro攔截Ajax請求

上一篇文章:Spring Boot 整合Shiro實現登陸認證和許可權控制,我們對shiro進行了整合。這一次我們具體來講一下shiro中的攔截器。
Shiro在處理非法請求比如沒有通過登入認證的請求,他會直接幫你跳轉到登入頁面,或者訪問沒有許可權的頁面他會給你返回403頁面。然而在我的專案中,會使用ajax去請求,然而卻在認證失敗或者沒有許可權的時候不能返回對應的資訊。

接下來我們要為我們的專案中新增許可權驗證失敗的過濾器:

package com.ciyou.edu.filter

import com.ciyou.edu.utils.JSONUtil
import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
import
org.slf4j.Logger import org.slf4j.LoggerFactory import javax.servlet.ServletRequest import javax.servlet.ServletResponse import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse /** * 許可權驗證失敗的過濾器 */ class ShiroPermissionsFilter extends PermissionsAuthorizationFilter
{
private static final Logger logger = LoggerFactory.getLogger(ShiroPermissionsFilter.class) /** * shiro認證perms資源失敗後回撥方法 * @param servletRequest * @param servletResponse * @return * @throws IOException */ @Override protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws
IOException { logger.info("----------許可權控制-------------") HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse String header = httpServletRequest.getHeader("X-Requested-With") boolean isAjax = "XMLHttpRequest" == header if (isAjax) {//如果是ajax返回指定格式資料 logger.info("----------AJAX請求拒絕-------------") httpServletResponse.setCharacterEncoding("UTF-8") httpServletResponse.setContentType("application/json") //返回禁止訪問json字串 httpServletResponse.getWriter().write(JSONUtil.returnForbiddenResult()) } else {//如果是普通請求進行重定向 logger.info("----------普通請求拒絕-------------") httpServletResponse.sendRedirect("/403") } return false } }

上述程式碼,區分普通請求和ajax請求,並且對於ajax請求返回相應的json資訊。
通過我們自己建立的JSONUtil返回特定的json字串,整個專案返回的json都是用JSONUtil進行構造返回。

package com.ciyou.edu.utils

import net.sf.json.JSONObject
import org.slf4j.Logger
import org.slf4j.LoggerFactory


class JSONUtil {
    private static final Logger logger = LoggerFactory.getLogger(JSONUtil.class)

    static String returnJSONResult(boolean success, String state ,String message,Object entity){
        Map map = new HashMap()
        map?.put("isSuccess",success)
        map?.put("stateCode",state)
        map?.put("message",message)
        map?.put("entity",entity)
        logger.info("返回JSON字串:" + JSONObject.fromObject(map)?.toString())
        return JSONObject.fromObject(map)?.toString()
    }

    /**
     * 設定失敗訊息JSON字串
     * @param message
     * @return
     */
    static String returnFailReuslt(String message){
        return returnJSONResult(false, "200" ,message,null)
    }

    /**
     * 設定返回實體JSON字串
     * @param entity
     * @return
     */
    static String returnEntityReuslt(Object entity){
        return returnJSONResult(true, "200" ,null,entity)
    }

    /**
     * 設定403許可權不足JSON字串
     * @return
     */
    static String returnForbiddenResult(){
        return returnJSONResult(false, "403" ,"許可權不足!! 禁止訪問!!",null)
    }

    /**
     * 返回成功訊息JSON字串
     * @param message
     * @return
     */
    static String returnSuccessResult(String message){
        return returnJSONResult(true, "200" ,message,null)
    }

}

接下來我們需要在配置類中配置過濾器
這裡寫圖片描述

相關推薦

Spring Boot 整合Shiro攔截Ajax請求

上一篇文章:Spring Boot 整合Shiro實現登陸認證和許可權控制,我們對shiro進行了整合。這一次我們具體來講一下shiro中的攔截器。 Shiro在處理非法請求比如沒有通過登入認證的請求

Spring boot整合shiro使用Ajax方式,最詳細教程

最近一直在自己的個人專案中整合進shiro這個許可權控制框架,踩了不少的坑,sb(允許我這麼叫他把,方便簡潔)整合shiro的教程不少,但是使用ajax方式的還真的不是很多,下面把我自己的經驗分享給大家。 1、在pom中加入shiro的包 <

spring boot 整合shiro,swagger 加入攔截器後 swagger 不能訪問

在shiro的配置檔案中放行swagger: filterMap.put("/swagger-ui.html", "anon"); filterMap.put("/

spring boot整合shiro 簡單許可權控制

package me.config; import javax.annotation.Resource; import me.domain.entity.CmsUser; import me.service.UserService; import me.utils.MD5Util

Spring Boot 整合 Shiro實現許可權控制,親測可用,附帶sql

前提: 本文主要講解Spring Boot 與 Shiro的整合 與許可權控制的實現方式(主要以程式碼實現功能為主),主要用到的技術Spring Boot+Shiro+Jpa(通過Maven構建),並不會涉及到Shiro框架的原始碼分析 如果有想要學習Shiro框架的小夥伴可以去http://shiro.

spring-boot整合shiro

概述 許可權體系在現代任何IT系統中都是很基礎但又非常重要的部分,無論是傳統MIS系統還是網際網路系統,出於保護業務資料和應用自身的安全,都會設計自己的授權鑑權策略。 最近專案中也需要用到許可權驗證功能,專案為spring-boot工程,現成的許可權驗證框架有shiro和spri

Spring Boot整合shiro

shiro面世已經有很長時間了,相比Spring security更加精簡一些,也更容易上手,因此就想分享下這段時間的學習成果,就當是學習筆記了1 pom檔案如下<project xmlns="http://maven.apache.org/POM/4.0.0" xml

spring boot 整合shiro(使用者授權和許可權控制)

(1) pom.xml中新增Shiro依賴 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId>

spring boot整合Shiro實現單點登入

前面的部落格中,我們說道了Shiro的兩個最大的特點,認證和授權,而單點登入也是屬於認證的一部分,預設情況下,Shiro已經為我們實現了和Cas的整合,我們加入整合的一些配置就ok了。 1、加入shiro-cas包 <!-- shiro整合cas單點 -->

Spring Boot整合shiro,出現UnavailableSecurityManagerException 異常

問題描述:由於在java過濾器中通過User token = (User) SecurityUtils.getSubject().getPrincipal();獲取當前的登入使用者的資訊,報UnavailableSecurityManagerException這個異常。spr

spring boot 整合shiro 配置類報錯問題

這裡傳入的是下邊返回的自定義Realm,下邊是報錯,報的是該類不能被裝載,由jdk自己裝載,這裡不是太懂,記錄一下,由於錯誤太長,不好截圖,直接複製錯誤內容 >>>>>>>>>>>>>>&

Spring Boot 整合Shiro給Swagger&Druid放行資源

shiro的過濾器鏈配置: //放行靜態資源 filterChainDefinitionMap.put("/static/**", "anon");

spring boot整合shiroshiro過濾器介紹

過濾器鏈條配置說明 1、一個URL可以配置多個Filter,使用逗號分隔 2、當設定多個過濾器時,全部驗證通過,才視為通過 3、部分過濾器可指定引數,如perms,roles Shiro內建的FilterChain anon(org.apac

Spring Boot 整合 Shiro 進行登入認證

安全無處不在,趁著放假讀了一下 Shiro 文件,並記錄一下 Shiro 整合 Spring Boot 在資料庫中根據角色控制訪問許可權 簡介 Apache Shiro是一個功能強大、靈活的,開源的安全框架。它可以乾淨利落地處理身份驗證、授權、企業會話管理和

spring boot 整合shiro詳細教程

我們開發時候有時候要把傳統spring shiro轉成spring boot專案,或者直接整合,那麼我們要搞清楚一個知識,就是 xml配置和spring bean程式碼配置的關係,這一點很重要,因為spring boot是沒有xml配置檔案的(也不絕對,spring boot

spring boot 整合shiro的配置

spring boot提供了一個自帶的認證框架,同時也提供自定義的javaconfig配置擴充套件,spring-sercurity同樣也是優秀的框架,但是習慣了用apache shiro框架,而且原專案就是整合的shiro框架,到網上找了一下配置方式,沒找到完

spring boot 整合 shiro

版本說明: spring boot : 1.5.8.RELEASE shiro: 1.4.0 在沒有shiro-spring-boot-web-stater之前,我們通常的做法是把xx-shiro.xml中bean在configuration中定義,或者就是xml中進行定義

Spring Boot 整合Shiro和CAS

請大家在看本文之前,先了解如下知識點: 1、Shiro 是什麼?怎麼用? 2、Cas 是什麼?怎麼用? 3、最好有Spring基礎 首先看一下下面這張圖: 第一個流程是單純使用Shiro的流程。 第二個流程是單純使用Cas的流程。 第三個圖是Shiro整合Cas後的流程。 PS:流程圖急急

Spring Boot 整合Shiro和Redis關於@Cacheble註解無效的解決方法

在我做專案的時候,在Spring Boot 中對Shiro和Redis進行了整合,但實際發現Spring boot中Shiro和Redis整合後,Spring的@cacheble註解無效。 出現的情況如下: 如果只是Spring boot和Redis整合,

spring boot 整合shiro

本文章參考http://www.vxzsk.com/769.html和http://www.cnblogs.com/ityouknow/p/7089177.html shiro的使用者認證簡而言之就是對使用者登入進行管理,包括自動校驗使用者名稱和密碼,對密碼進