权限管理框架-spring-Sercurity概念及快速入门步骤代码详解

本文介绍了SpringSecurity作为安全管理框架的基本概念,包括认证和授权的定义,并详细讲解了使用SpringSecurity进行快速入门的步骤,从创建Web项目到配置文件和页面准备。
摘要由CSDN通过智能技术生成

SpringSecurity概念

  1. SpringSecurity是一个安全管理框架,提供了认证与授权这些基本操作

  2. 认证: 用户访问系统,系统校验用户身份是否合法的过程就是认证。常见的认证: 登陆认证。

  3. 授权:用户认证后,访问系统资源,校验用户是否有权限访问系统资源的过程就是授权访问校验,简称为授权。权限校验过程:1.获取用户的权限; 2. 知道访问资源需要的权限;3.拿着访问资源需要的权限去用户权限列表查找,找到则授权访问。否则拒绝访问。

注意

认证与授权,不是属于springsecurity所特有的概念,这些是通用的概念。

常见的权限管理框架:

  1. springsecurity
  2. apache shiro
  3. 自己写代码封装认证授权操作。

.SpringSecurity(二)快速入门

使用步骤:

  1. 创建web项目
  2. 添加依赖
  3. 配置web.xml
  4. spring-security.xml 配置
  5. 页面准备

实现

  1. 创建web项目

  2. 添加依赖

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
      <modelVersion>4.0.0</modelVersion>  
      <groupId>cn.itcast</groupId>  
      <artifactId>spring_security_demo</artifactId>  
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
      <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <spring.security.version>5.0.1.RELEASE</spring.security.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework
1. 登录逻辑代码: ``` @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserDetailsService userDetailsService; @Autowired private JwtAuthenticationEntryPoint unauthorizedHandler; @Bean public JwtAuthenticationFilter authenticationTokenFilterBean() throws Exception { return new JwtAuthenticationFilter(); } @Override public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { authenticationManagerBuilder .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Bean(BeanIds.AUTHENTICATION_MANAGER) @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http .cors() .and() .csrf() .disable() .exceptionHandling() .authenticationEntryPoint(unauthorizedHandler) .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/api/auth/**") .permitAll() .anyRequest() .authenticated(); // 添加JWT filter http.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); } } ``` 2. 认证授权代码: ``` @Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override @Transactional public UserDetails loadUserByUsername(String usernameOrEmail) throws UsernameNotFoundException { // 查找用户 User user = userRepository.findByUsernameOrEmail(usernameOrEmail, usernameOrEmail) .orElseThrow(() -> new UsernameNotFoundException("User not found with username or email : " + usernameOrEmail) ); // 返回用户详情 return UserPrincipal.create(user); } @Transactional public UserDetails loadUserById(Long id) { // 查找用户 User user = userRepository.findById(id).orElseThrow( () -> new ResourceNotFoundException("User", "id", id) ); // 返回用户详情 return UserPrincipal.create(user); } } ``` 3. 退出逻辑代码: ``` @RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private JwtTokenProvider tokenProvider; @Autowired private HttpServletRequest request; @PostMapping("/logout") public ResponseEntity<?> logout() { // 清除本地的认证信息 SecurityContextHolder.getContext().setAuthentication(null); // 获取JWT token String jwt = getJwtFromRequest(request); // 验证并删除JWT token if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) { tokenProvider.deleteToken(jwt); } // 返回成功信息 return ResponseEntity.ok(new ApiResponse(true, "You have been successfully logged out.")); } private String getJwtFromRequest(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { return bearerToken.substring(7, bearerToken.length()); } return null; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值