Spring-Security-教程(四)--权限动态修改
2019-04-03 本文已影响0人
老亚瑟程序猿
前言
本篇pom.xml与上篇文章 Spring Security 入门教程(三)- 基于登录认证记住我实例 相同。
项目代码:https://github.com/Bootcap/spring-security-study-session
一、新建VipController.java
package com.bootcap.session.security.controller;
/**
* 动态权限修改Controller
* 2018-12-15 14:16
*/
@Controller
@ResponseBody
public class VipController {
@RequestMapping(value = "/vip/index",method = RequestMethod.GET)
public String vipPage(){
return "只有VIP用户可观看";
}
@RequestMapping(value = "/getVIP",method = RequestMethod.GET)
public String getVip(){
// 获取认证信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> update = new ArrayList<>(authentication.getAuthorities());
// 添加VIP授权
update.add(new SimpleGrantedAuthority("ROLE_VIP"));
// 生成新的认证信息
Authentication newAuth = new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), authentication.getCredentials(), update);
SecurityContextHolder.getContext().setAuthentication(newAuth);
return "ok";
}
}
二、修改WebSecurityConfig.java
package com.bootcap.session.security.configuration;
/**
* 2018-12-10 11:03
*/
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/getVIP").permitAll()
.antMatchers("/vip/index").hasRole("VIP");
}
}
三、启动测试
3.1 假设当前你的权限只有 ROLE_USER的时候访问:localhost:8080/vip/index 时页面会提示403,同时控制台也会抛出“Access is denied 无权限”异常(提示:若没有异常可以在application.yml下修改:org.springframework.security: debug)。
3.2 开启另外窗口,访问:localhost:8080/getVIP 地址,返回了"ok",再刷新页面即可正常访问;
上一篇: Spring Security 入门教程(三)- 基于登录认证记住我实例
上一篇: Spring Security (五) - 实现QQ授权登录