SpringBoot中使用Spring Security实现权限控制

https://www.jianshu.com/p/defa75b65a46

只是这里需要改下:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/css/**", "/index").permitAll()       
                .antMatchers("/user/**").hasRole("USER")      
                .anyRequest()
                .authenticated()      
                .and()
            .formLogin()
                .and()
                .csrf().disable() //关闭CSRF
                .formLogin().loginPage("/login")
                .loginProcessingUrl("/form")
                .defaultSuccessUrl("/index") //成功登陆后跳转页面
                .failureUrl("/loginError").permitAll(); 
    }
    
}

基于注解的权限控制

需要在security配置类上加上注解@EnableGlobalMethodSecurity(prePostEnabled = true)

/**
 * 为了浏览器直接调用,使用get请求
 * @return
 */
@GetMapping("/add")
@PreAuthorize("hasAuthority('sys:user:add')")
public String addUser(){
    return "success";
}
/**
* 为了浏览器直接调用,使用get请求
*/
@GetMapping("/put")
@PreAuthorize("hasAuthority('sys:user:put')")
public String putUser(){
    return "success";
}

/**
* 为了浏览器直接调用,使用get请求
*/
@GetMapping("/get")
@PreAuthorize("hasAuthority('sys:user:get')")
public UserDao queryUser(){
    UserDao userDao=new UserDao();
    userDao.setUsername("lisi");
    userDao.setPassword(new BCryptPasswordEncoder().encode("123456"));
    userDao.setEmail("123@163.com");
    return userDao;
}

/**
* 为了浏览器直接调用,使用get请求
*/
@GetMapping("/del")
@PreAuthorize("hasAuthority('sys:user:del')")
public String delUser(){
    return "success";
}

常见的表达式
Spring Security可用表达式对象的基类是SecurityExpressionRoot。

表达式 描述
hasRole([role]) 用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去除参考Remove the ROLE_
hasAnyRole([role1,role2]) 用户拥有任意一个制定的角色时返回true
hasAuthority([authority]) 等同于hasRole,但不会带有ROLE_前缀
hasAnyAuthority([auth1,auth2]) 等同于hasAnyRole
permitAll 永远返回true
denyAll 永远返回false
anonymous 当前用户是anonymous时返回true
rememberMe 当前勇士是rememberMe用户返回true
authentication 当前登录用户的authentication对象
fullAuthenticated 当前用户既不是anonymous也不是rememberMe用户时返回true
hasIpAddress(‘192.168.1.0/24’)) 请求发送的IP匹配时返回true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合Spring Security可以实现登录认证和数据权限管理。下面是简单的步骤: 1. 添加依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 配置Spring Security 在主配置类添加@EnableWebSecurity注解,开启Spring Security,并且创建一个继承自WebSecurityConfigurerAdapter的配置类,用于配置Spring Security。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 配置登录页面和登录请求的路径 http.formLogin() .loginPage("/login") .loginProcessingUrl("/login") .defaultSuccessURL("/home") .and() // 配置退出登录的路径和跳转页面 .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login") .and() // 配置拦截规则 .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() // 关闭CSRF保护 .csrf().disable(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 配置用户信息和密码加密方式 auth.inMemoryAuthentication() .passwordEncoder(new BCryptPasswordEncoder()) .withUser("admin") .password(new BCryptPasswordEncoder().encode("admin")) .roles("ADMIN"); } } ``` 3. 配置数据权限管理 如果需要实现数据权限管理,可以在配置类添加一个实现了FilterInvocationSecurityMetadataSource接口的类,用于获取当前请求所需的权限信息,并且在配置类添加一个实现了AccessDecisionManager接口的类,用于判断当前用户是否有访问该资源的权限。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomFilterInvocationSecurityMetadataSource customFilterInvocationSecurityMetadataSource; @Autowired private CustomAccessDecisionManager customAccessDecisionManager; @Override protected void configure(HttpSecurity http) throws Exception { // 配置拦截规则 http.authorizeRequests() .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() { @Override public <O extends FilterSecurityInterceptor> O postProcess(O object) { object.setSecurityMetadataSource(customFilterInvocationSecurityMetadataSource); object.setAccessDecisionManager(customAccessDecisionManager); return object; } }) .and() // 关闭CSRF保护 .csrf().disable(); } } ``` 参考资料: 1. Spring Security官方文档:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/ 2. Spring Boot整合Spring Security实现登录认证和数据权限管理:https://www.jianshu.com/p/04d848c9cb8d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值