SpringSecurity權(quán)限控制實(shí)現(xiàn)原理解析
菜單控制:
可以用來(lái)判斷這個(gè)用戶是不是有這些角色,沒(méi)有的話就不展示
數(shù)據(jù)控制:
由于數(shù)據(jù)都是從后端查的,在后端控制權(quán)限就可以了
<!-- 開(kāi)啟權(quán)限控制注解支持 jsr250-annotations="enabled"表示支持jsr250-api的注解,需要jsr250-api的jar包 pre-post-annotations="enabled"表示支持spring表達(dá)式注解 secured-annotations="enabled"這才是SpringSecurity提供的注解 --> <security:global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled" secured-annotations="enabled"/>
注:這個(gè)要放在mvc的容器中,因?yàn)樽尤萜骺梢栽L問(wèn)到主容器,主容器訪問(wèn)不到子容器
/表示當(dāng)前類中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能訪問(wèn) @Controller @RequestMapping("/product") @RolesAllowed({"ROLE_ADMIN","ROLE_PRODUCT"})//JSR-250注解 public class ProductController { @RequestMapping("/findAll") public String findAll(){ return "product-list"; } } //表示當(dāng)前類中findAll方法需要ROLE_ADMIN或者ROLE_PRODUCT才能訪問(wèn) @Controller @RequestMapping("/product") public class ProductController { @RequestMapping("/findAll") @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_PRODUCT')")//spring表達(dá)式注解 public String findAll(){ return "product-list"; } } //表示當(dāng)前類中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能訪問(wèn) @Controller @RequestMapping("/product") @Secured({"ROLE_ADMIN","ROLE_PRODUCT"})//SpringSecurity注解 public class ProductController { @RequestMapping("/findAll") public String findAll(){ return "product-list"; } }
但是會(huì)報(bào)403無(wú)法訪問(wèn)
方式一:在 spring-security.xml配置文件中處理
<!--設(shè)置可以用spring的el表達(dá)式配置Spring Security并自動(dòng)生成對(duì)應(yīng)配置組件(過(guò)濾器)--> <security:http auto-config="true" use-expressions="true"> <!--省略其它配置--> <!--403異常處理--> <security:access-denied-handler error-page="/403.jsp"/> </security:http>
方式二:在 web.xml中處理
<error-page> <error-code>403</error-code> <location>/403.jsp</location> </error-page>
方式三:編寫(xiě)異常處理器
/** * @author WGR * @create 2020/3/2 -- 17:33 */ @ControllerAdvice public class ControllerExceptionAdvice { //只有出現(xiàn)AccessDeniedException異常才調(diào)轉(zhuǎn)403.jsp頁(yè)面 @ExceptionHandler(AccessDeniedException.class) public String exceptionAdvice(){ System.out.println("1234"); return "forward:/403.jsp"; } }
注:如果是spring項(xiàng)目,也要把這個(gè)掃描進(jìn)去。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot整合Security權(quán)限控制登錄首頁(yè)
- SpringBoot?整合Security權(quán)限控制的初步配置
- 詳解如何在項(xiàng)目中應(yīng)用SpringSecurity權(quán)限控制
- Spring?Security權(quán)限管理實(shí)現(xiàn)接口動(dòng)態(tài)權(quán)限控制
- Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼
- 基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問(wèn)題
- 詳解Spring Security 中的四種權(quán)限控制方式
- Spring?Security權(quán)限控制的實(shí)現(xiàn)接口
相關(guān)文章
通過(guò)實(shí)例解析JMM和Volatile底層原理
這篇文章主要介紹了通過(guò)實(shí)例解析JMM和Volatile底層原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml
這篇文章主要介紹了多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java中字符串根據(jù)寬度(像素)換行的問(wèn)題
這篇文章主要介紹了Java中字符串根據(jù)寬度(像素)換行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09從零開(kāi)始搭建springboot+springcloud+mybatis本地項(xiàng)目全過(guò)程(圖解)
這篇文章主要介紹了從零開(kāi)始搭建springboot+springcloud+mybatis本地項(xiàng)目全過(guò)程(圖解),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01字節(jié)二面SpringBoot可以同時(shí)處理多少請(qǐng)求
這篇文章主要為大家介紹了字節(jié)二面之SpringBoot可以同時(shí)處理多少請(qǐng)求面試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07