授權即認證通過后,系統給用戶賦予一定的權限,用戶只能根據權限訪問系統中的某些資源。RBAC是業界普遍采用的授權方式,它有兩種解釋:

基于角色的訪問控制,即按角色進行授權。比如在企業管理系統中,主體角色為總經理可以查詢企業運營報表
Resource-Based Access Control基于資源的訪問控制,即按資源(或權限)進行授權。比如在企業管理系統中,用戶必須 具有查詢報表權限才可以查詢企業運營報表
2、權限表設計
3、自定義查詢權限用戶角色,角色權限都是多對多關系,即一個用戶擁有多個角色,一個角色屬于多個用戶;一個角色擁有多個權限,一個權限屬于多個角色。這種方式需要指定用戶有哪些角色,而角色又有哪些權限。
@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.查詢用戶所有權限
        Listpermissions = userMapper.findPermissionByUsername(username);
//      4.將自定義的權限集合轉為Security的權限類型集合
        Listlist = new ArrayList<>();
        for (Permission permission:permissions) {
            list.add(new SimpleGrantedAuthority(permission.getUrl()));
        }
//      3、封裝UserDetails對象
        UserDetails userDetails = User.withUsername(users.getUsername()).password(users.getPassword()).authorities(list).build();
        return userDetails;
    }
}    根據請求的路徑進行攔截,如果user沒有訪問url的權限則狀態碼為403
//      需要認證的資源
        http.authorizeHttpRequests()
                .antMatchers("/login.html").permitAll()//登錄頁不需要認證
                .antMatchers("/fail").permitAll()//失敗頁面不需要認證
                //需要認證的權限
                .antMatchers("/reportform/find").hasAuthority("/reportform/find")
                .antMatchers("/salary/find").hasAuthority("/salary/find")
                .antMatchers("/tax/find").hasAuthority("/tax/find")
                .anyRequest().authenticated();//其余所有請求都需要認證通過@Secured注解添加訪問權限(權限必須以ROLE_開頭)不常用
@SpringBootApplication
@MapperScan
@EnableGlobalMethodSecurity(securedEnabled = true)//開啟secured注解掃描
public class SpringSecurity2Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringSecurity2Application.class, args);
    }
}//  對權限進行攔截必須以ROLE_開頭,數據也必須以ROLE_開頭
    @Secured("ROLE_/reportform/find")
    @GetMapping("/reportform/find")
    @ResponseBody
    public String testUrl1(){
        System.out.println("/reportform/find");
        return "/reportform/find權限攔截";
    }
    @Secured("/salary/find")//403沒有權限
    @GetMapping("/salary/find")
    @ResponseBody
    public String testUrl2(){
        System.out.println("/salary/find");
        return "/salary/find權限攔截";
    }
    @Secured("/tax/find")//403沒有權限
    @GetMapping("/tax/find")
    @ResponseBody
    public String testUrl3(){
        System.out.println("/tax/find");
        return "/tax/find權限攔截";
    }該注解可以在方法執行前判斷用戶是否具有權限
//        默認放行首頁和失敗頁    
    http.authorizeHttpRequests()
                .antMatchers("/login.html").permitAll()//登錄頁不需要認證
                .antMatchers("/fail").permitAll()//失敗頁面不需要認證
                //需要認證的權限
//                .antMatchers("/reportform/find").hasAuthority("/reportform/find")
//                .antMatchers("/salary/find").hasAuthority("/salary/find")
//                .antMatchers("/tax/find").hasAuthority("/tax/find")
                .anyRequest().authenticated();//其余所有請求都需要認證@SpringBootApplication
@MapperScan
@EnableGlobalMethodSecurity(prePostEnabled = true) //開啟@PreAuthorize注解掃描
public class SpringSecurity2Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringSecurity2Application.class, args);
    }
}//url權限匹配    
@PreAuthorize("hasAnyAuthority('/salary/find')")
    @GetMapping("/salary/find")
    @ResponseBody
    public String testUrl2(){
        System.out.println("/salary/find");
        return "/salary/find權限攔截";
    }
    @PreAuthorize("hasAnyAuthority('/tax/find')")
    @GetMapping("/tax/find")
    @ResponseBody
    public String testUrl3(){
        System.out.println("/tax/find");
        return "/tax/find權限攔截";
    }添加xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5",sec:authorize="hasAnyAuthority('/url')”若user有訪問該url權限則顯示此菜單
org.thymeleaf.extras thymeleaf-extras-springsecurity5主頁面 主頁面
菜單一
菜單二
菜單三
退出登錄//自定義權限不足頁面
權限異常 權限不足定義權限不足處理器類需要實現AccessDeniedHandler接口實現其中的handle方法
public class NoPermissionHandler implements AccessDeniedHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
        System.out.println("權限不足");
        response.sendRedirect("/noPermission.html");
    }
}SecurityConfig權限配置類中添加自定義的權限不足處理器
//      權限不足異常
        http.exceptionHandling()
                .accessDeniedHandler(new NoPermissionHandler());博客:孤獨&烙印的博客_博客-springSecurity,spring-fox,vue領域博主
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
                網站欄目:SpringSecurity集合(權限)-創新互聯
                
                新聞來源:http://www.yijiale78.com/article38/dgsepp.html
            
成都網站建設公司_創新互聯,為您提供外貿建站、網站營銷、域名注冊、網站策劃、企業網站制作、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
