中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SpringSecurity集合(權(quán)限)-創(chuàng)新互聯(lián)

1、SpringSecurity授權(quán)

授權(quán)即認(rèn)證通過后,系統(tǒng)給用戶賦予一定的權(quán)限,用戶只能根據(jù)權(quán)限訪問系統(tǒng)中的某些資源。RBAC是業(yè)界普遍采用的授權(quán)方式,它有兩種解釋:

10年積累的成都網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有??诿赓M(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。Role-Based Access Control

基于角色的訪問控制,即按角色進(jìn)行授權(quán)。比如在企業(yè)管理系統(tǒng)中,主體角色為總經(jīng)理可以查詢企業(yè)運(yùn)營(yíng)報(bào)表

Resource-Based Access Control

基于資源的訪問控制,即按資源(或權(quán)限)進(jìn)行授權(quán)。比如在企業(yè)管理系統(tǒng)中,用戶必須 具有查詢報(bào)表權(quán)限才可以查詢企業(yè)運(yùn)營(yíng)報(bào)表

2、權(quán)限表設(shè)計(jì)

用戶角色,角色權(quán)限都是多對(duì)多關(guān)系,即一個(gè)用戶擁有多個(gè)角色,一個(gè)角色屬于多個(gè)用戶;一個(gè)角色擁有多個(gè)權(quán)限,一個(gè)權(quán)限屬于多個(gè)角色。這種方式需要指定用戶有哪些角色,而角色又有哪些權(quán)限。

3、自定義查詢權(quán)限
@Service
public class MySecurityService implements UserDetailsService {
    @Autowired
    @Qualifier(value = "userMapper")
    private UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//       1、查詢條件
        QueryWrapperwrapper = new QueryWrapper().eq("username", username);
//      2、查詢用戶
        Users users = userMapper.selectOne(wrapper);
        if(users==null){
            return null;
        }
//      3.查詢用戶所有權(quán)限
        Listpermissions = userMapper.findPermissionByUsername(username);
//      4.將自定義的權(quán)限集合轉(zhuǎn)為Security的權(quán)限類型集合
        Listlist = new ArrayList<>();
        for (Permission permission:permissions) {
            list.add(new SimpleGrantedAuthority(permission.getUrl()));
        }
//      3、封裝UserDetails對(duì)象
        UserDetails userDetails = User.withUsername(users.getUsername()).password(users.getPassword()).authorities(list).build();
        return userDetails;
    }
}
3.1自定義訪問權(quán)限

根據(jù)請(qǐng)求的路徑進(jìn)行攔截,如果user沒有訪問url的權(quán)限則狀態(tài)碼為403

//      需要認(rèn)證的資源
        http.authorizeHttpRequests()
                .antMatchers("/login.html").permitAll()//登錄頁不需要認(rèn)證
                .antMatchers("/fail").permitAll()//失敗頁面不需要認(rèn)證
                //需要認(rèn)證的權(quán)限
                .antMatchers("/reportform/find").hasAuthority("/reportform/find")
                .antMatchers("/salary/find").hasAuthority("/salary/find")
                .antMatchers("/tax/find").hasAuthority("/tax/find")
                .anyRequest().authenticated();//其余所有請(qǐng)求都需要認(rèn)證
@Secured

通過@Secured注解添加訪問權(quán)限(權(quán)限必須以ROLE_開頭)不常用

@SpringBootApplication
@MapperScan
@EnableGlobalMethodSecurity(securedEnabled = true)//開啟secured注解掃描
public class SpringSecurity2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringSecurity2Application.class, args);
    }

}
//  對(duì)權(quán)限進(jìn)行攔截必須以ROLE_開頭,數(shù)據(jù)也必須以ROLE_開頭
    @Secured("ROLE_/reportform/find")
    @GetMapping("/reportform/find")
    @ResponseBody
    public String testUrl1(){
        System.out.println("/reportform/find");
        return "/reportform/find權(quán)限攔截";
    }

    @Secured("/salary/find")//403沒有權(quán)限
    @GetMapping("/salary/find")
    @ResponseBody
    public String testUrl2(){
        System.out.println("/salary/find");
        return "/salary/find權(quán)限攔截";
    }

    @Secured("/tax/find")//403沒有權(quán)限
    @GetMapping("/tax/find")
    @ResponseBody
    public String testUrl3(){
        System.out.println("/tax/find");
        return "/tax/find權(quán)限攔截";
    }
@PreAuthorize(推薦)

該注解可以在方法執(zhí)行前判斷用戶是否具有權(quán)限

//        默認(rèn)放行首頁和失敗頁    
    http.authorizeHttpRequests()
                .antMatchers("/login.html").permitAll()//登錄頁不需要認(rèn)證
                .antMatchers("/fail").permitAll()//失敗頁面不需要認(rèn)證
                //需要認(rèn)證的權(quán)限
//                .antMatchers("/reportform/find").hasAuthority("/reportform/find")
//                .antMatchers("/salary/find").hasAuthority("/salary/find")
//                .antMatchers("/tax/find").hasAuthority("/tax/find")
                .anyRequest().authenticated();//其余所有請(qǐng)求都需要認(rèn)證
@SpringBootApplication
@MapperScan
@EnableGlobalMethodSecurity(prePostEnabled = true) //開啟@PreAuthorize注解掃描
public class SpringSecurity2Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringSecurity2Application.class, args);
    }

}
//url權(quán)限匹配    
@PreAuthorize("hasAnyAuthority('/salary/find')")
    @GetMapping("/salary/find")
    @ResponseBody
    public String testUrl2(){
        System.out.println("/salary/find");
        return "/salary/find權(quán)限攔截";
    }

    @PreAuthorize("hasAnyAuthority('/tax/find')")
    @GetMapping("/tax/find")
    @ResponseBody
    public String testUrl3(){
        System.out.println("/tax/find");
        return "/tax/find權(quán)限攔截";
    }
前端控制訪問權(quán)限

添加xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5",sec:authorize="hasAnyAuthority('/url')”若user有訪問該url權(quán)限則顯示此菜單

org.thymeleaf.extrasthymeleaf-extras-springsecurity5
主頁面主頁面
菜單一
菜單二
菜單三
退出登錄
SpringSecurity自定義權(quán)限不足頁面,解決403權(quán)限異常
//自定義權(quán)限不足頁面
權(quán)限異常權(quán)限不足

定義權(quán)限不足處理器類需要實(shí)現(xiàn)AccessDeniedHandler接口實(shí)現(xiàn)其中的handle方法

public class NoPermissionHandler implements AccessDeniedHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
        System.out.println("權(quán)限不足");
        response.sendRedirect("/noPermission.html");
    }
}

SecurityConfig權(quán)限配置類中添加自定義的權(quán)限不足處理器

//      權(quán)限不足異常
        http.exceptionHandling()
                .accessDeniedHandler(new NoPermissionHandler());

博客:孤獨(dú)&烙印的博客_博客-springSecurity,spring-fox,vue領(lǐng)域博主

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:SpringSecurity集合(權(quán)限)-創(chuàng)新互聯(lián)
新聞來源:http://www.rwnh.cn/article38/dgsepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站營(yíng)銷、域名注冊(cè)、網(wǎng)站策劃、企業(yè)網(wǎng)站制作品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
名山县| 北海市| 张家港市| 宁明县| 抚松县| 永安市| 离岛区| 安溪县| 易门县| 晋州市| 泸州市| 新晃| 利辛县| 偏关县| 麻栗坡县| 全州县| 奎屯市| 望城县| 永济市| 宜兴市| 九江市| 井陉县| 宾阳县| 中方县| 宁武县| 普定县| 香格里拉县| 宁德市| 天全县| 塘沽区| 分宜县| 舞阳县| 磐石市| 顺义区| 金堂县| 龙游县| 山丹县| 大城县| 巍山| 宁晋县| 渝北区|