SpringSecurity从入门到精通:认证配置详解&权限系统的作用

发布时间 2023-04-25 11:42:22作者: 漁夫

认证配置详解

Config

package com.sangeng.config;

import com.sangeng.filter.JwtAuthenticationTokenFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;


@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
       /* http
                //关闭csrf
                .csrf().disable()
                //不通过Session获取SecurityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                // 对于登录接口 允许匿名访问
                .antMatchers("/user/login").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated();*/
       http
               .csrf().disable()
               .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
               .and()
               .authorizeRequests()
               .antMatchers("/hello").permitAll()
               .antMatchers("/user/login").anonymous()
               .anyRequest().authenticated();

        http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

 

 

 

 

权限系统的作用

  例如一个学校图书馆的管理系统,如果是普通学生登录就鞥看到借书还书的功能,不可能让他看到并且去使用添加书籍信息,删除书籍信息等功能,但是如果是一个图书馆的管理员的账号登录了,应该就能看到并使用添加书籍信息,删除书籍信息等功能

  总结起来就是不同的用户可以使用不同的功能,这就是权限系统要去实现的效果

  我们不能只依赖前端去判断用户的权限 来选择显示拿些菜单哪些按钮,因为如果是这样,如果有人知道了对应功能的接口地址,就可以不通过前端,直接去发送请求来实现相关功能操作

  所以我们还需要子啊后台进行用户权限的判断,判断当前用户是否有相应的权限,必须基于所需权限才能进行相应的操作