授權(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ì)3、自定義查詢權(quán)限用戶角色,角色權(quán)限都是多對(duì)多關(guān)系,即一個(gè)用戶擁有多個(gè)角色,一個(gè)角色屬于多個(gè)用戶;一個(gè)角色擁有多個(gè)權(quán)限,一個(gè)權(quán)限屬于多個(gè)角色。這種方式需要指定用戶有哪些角色,而角色又有哪些權(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.extras thymeleaf-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)
猜你還喜歡下面的內(nèi)容