• springboot集成spring-security(1)


    完整pom:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <groupId>com.sdkj</groupId>
    6. <artifactId>security</artifactId>
    7. <version>0.0.1-SNAPSHOT</version>
    8. <name>security</name>
    9. <description>Demo project for Spring Boot</description>
    10. <properties>
    11. <java.version>1.8</java.version>
    12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    13. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    14. <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    15. </properties>
    16. <dependencies>
    17. <dependency>
    18. <groupId>org.springframework.boot</groupId>
    19. <artifactId>spring-boot-starter-web</artifactId>
    20. </dependency>
    21. <dependency>
    22. <groupId>org.springframework.boot</groupId>
    23. <artifactId>spring-boot-starter-test</artifactId>
    24. <scope>test</scope>
    25. <exclusions>
    26. <exclusion>
    27. <groupId>org.junit.vintage</groupId>
    28. <artifactId>junit-vintage-engine</artifactId>
    29. </exclusion>
    30. </exclusions>
    31. </dependency>
    32. <!-- spring security 安全认证 -->
    33. <dependency>
    34. <groupId>org.springframework.boot</groupId>
    35. <artifactId>spring-boot-starter-security</artifactId>
    36. <version>2.5.14</version>
    37. </dependency>
    38. <!-- pool 对象池 -->
    39. <dependency>
    40. <groupId>org.apache.commons</groupId>
    41. <artifactId>commons-pool2</artifactId>
    42. </dependency>
    43. <!-- redis 缓存操作 -->
    44. <dependency>
    45. <groupId>org.springframework.boot</groupId>
    46. <artifactId>spring-boot-starter-data-redis</artifactId>
    47. </dependency>
    48. <dependency>
    49. <groupId>org.projectlombok</groupId>
    50. <artifactId>lombok</artifactId>
    51. </dependency>
    52. <!-- Token生成与解析-->
    53. <dependency>
    54. <groupId>io.jsonwebtoken</groupId>
    55. <artifactId>jjwt</artifactId>
    56. <version>0.9.1</version>
    57. </dependency>
    58. <!-- fastjson2-->
    59. <dependency>
    60. <groupId>com.alibaba.fastjson2</groupId>
    61. <artifactId>fastjson2</artifactId>
    62. <version>2.0.12</version>
    63. </dependency>
    64. <dependency>
    65. <groupId>org.apache.commons</groupId>
    66. <artifactId>commons-lang3</artifactId>
    67. <version>3.12.0</version>
    68. </dependency>
    69. </dependencies>
    70. <dependencyManagement>
    71. <dependencies>
    72. <dependency>
    73. <groupId>org.springframework.boot</groupId>
    74. <artifactId>spring-boot-dependencies</artifactId>
    75. <version>${spring-boot.version}</version>
    76. <type>pom</type>
    77. <scope>import</scope>
    78. </dependency>
    79. </dependencies>
    80. </dependencyManagement>
    81. <build>
    82. <plugins>
    83. <plugin>
    84. <groupId>org.apache.maven.plugins</groupId>
    85. <artifactId>maven-compiler-plugin</artifactId>
    86. <version>3.8.1</version>
    87. <configuration>
    88. <source>1.8</source>
    89. <target>1.8</target>
    90. <encoding>UTF-8</encoding>
    91. </configuration>
    92. </plugin>
    93. <plugin>
    94. <groupId>org.springframework.boot</groupId>
    95. <artifactId>spring-boot-maven-plugin</artifactId>
    96. <version>2.3.7.RELEASE</version>
    97. <configuration>
    98. <mainClass>com.sdkj.security.SecurityApplication</mainClass>
    99. </configuration>
    100. <executions>
    101. <execution>
    102. <id>repackage</id>
    103. <goals>
    104. <goal>repackage</goal>
    105. </goals>
    106. </execution>
    107. </executions>
    108. </plugin>
    109. </plugins>
    110. </build>
    111. </project>

    1.新建用户类并继承UserDetails

    1. package com.sdkj.security.entity.system;
    2. import com.alibaba.fastjson2.annotation.JSONField;
    3. import lombok.Data;
    4. import org.springframework.security.core.GrantedAuthority;
    5. import org.springframework.security.core.userdetails.UserDetails;
    6. import java.util.Collection;
    7. import java.util.Set;
    8. /**
    9. * 登录用户身份权限
    10. * @author javachen
    11. */
    12. @Data
    13. public class LoginUser implements UserDetails
    14. {
    15. private static final long serialVersionUID = 1L;
    16. /**
    17. * 用户信息
    18. */
    19. private SysUser sysUser;
    20. /**
    21. * 角色信息
    22. */
    23. private SysRole sysRole;
    24. /**
    25. * 用户唯一标识
    26. */
    27. private String token;
    28. /**
    29. * 权限列表
    30. */
    31. private Set<String> permissions;
    32. /**
    33. * 登录时间
    34. */
    35. private Long loginTime;
    36. /**
    37. * 过期时间
    38. */
    39. private Long expireTime;
    40. /**
    41. * 登录IP地址
    42. */
    43. private String ipaddr;
    44. /**
    45. * 登录地点
    46. */
    47. private String loginLocation;
    48. /**
    49. * 浏览器类型
    50. */
    51. private String browser;
    52. /**
    53. * 操作系统
    54. */
    55. private String os;
    56. @JSONField(serialize = false)
    57. @Override
    58. public String getPassword()
    59. {
    60. return sysUser.getPassword();
    61. }
    62. @Override
    63. public String getUsername()
    64. {
    65. return sysUser.getUserName();
    66. }
    67. /**
    68. * 账户是否未过期,过期无法验证
    69. */
    70. @JSONField(serialize = false)
    71. @Override
    72. public boolean isAccountNonExpired()
    73. {
    74. return true;
    75. }
    76. /**
    77. * 指定用户是否解锁,锁定的用户无法进行身份验证
    78. *
    79. * @return
    80. */
    81. @JSONField(serialize = false)
    82. @Override
    83. public boolean isAccountNonLocked()
    84. {
    85. return true;
    86. }
    87. /**
    88. * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
    89. *
    90. * @return
    91. */
    92. @JSONField(serialize = false)
    93. @Override
    94. public boolean isCredentialsNonExpired()
    95. {
    96. return true;
    97. }
    98. /**
    99. * 是否可用 ,禁用的用户不能身份验证
    100. *
    101. * @return
    102. */
    103. @JSONField(serialize = false)
    104. @Override
    105. public boolean isEnabled()
    106. {
    107. return true;
    108. }
    109. @Override
    110. public Collection<? extends GrantedAuthority> getAuthorities()
    111. {
    112. return null;
    113. }
    114. public LoginUser() {
    115. }
    116. public LoginUser(SysUser sysUser, SysRole sysRole, Set<String> permissions) {
    117. this.sysUser = sysUser;
    118. this.sysRole = sysRole;
    119. this.permissions = permissions;
    120. }
    121. }

    SysRole:

    1. package com.sdkj.security.entity.system;
    2. import lombok.Data;
    3. import lombok.experimental.Accessors;
    4. import java.io.Serializable;
    5. /**
    6. * @author javachen
    7. * @description SysRole
    8. */
    9. @Data
    10. @Accessors(chain = true)
    11. public class SysRole implements Serializable {
    12. /**
    13. * id
    14. */
    15. private Long id;
    16. /**
    17. * 角色名称
    18. */
    19. private String name;
    20. /**
    21. * 角色权限字符串
    22. */
    23. private String permissionStr;
    24. }

    SysUser:

    1. package com.sdkj.security.entity.system;
    2. import lombok.Data;
    3. import lombok.experimental.Accessors;
    4. import java.io.Serializable;
    5. /**
    6. * @author javachen
    7. * @description SysUser
    8. */
    9. @Data
    10. @Accessors(chain = true)
    11. public class SysUser implements Serializable {
    12. /**
    13. * id
    14. */
    15. private Long id;
    16. /**
    17. * 用户账号
    18. */
    19. private String userName;
    20. /**
    21. * 密码
    22. */
    23. private String password;
    24. /**
    25. * 真实姓名
    26. */
    27. private String realName;
    28. /**
    29. * 身份证号
    30. */
    31. private String idCard;
    32. /**
    33. * 手机号码
    34. */
    35. private String phoneNumber;
    36. /**
    37. * sys_org_manager组织管理表id
    38. */
    39. private Long sysOrgManagerId;
    40. /**
    41. * sys_org_manager组织管理表name
    42. */
    43. private String sysOrgManagerName;
    44. /**
    45. * 状态(0启用 1禁用)
    46. */
    47. private String status;
    48. }

    2.定义UserDetailsServiceImpl类

    1. package com.sdkj.security.base;
    2. import com.sdkj.security.entity.system.LoginUser;
    3. import com.sdkj.security.entity.system.SysRole;
    4. import com.sdkj.security.entity.system.SysUser;
    5. import org.slf4j.Logger;
    6. import org.slf4j.LoggerFactory;
    7. import org.springframework.security.core.userdetails.UserDetails;
    8. import org.springframework.security.core.userdetails.UserDetailsService;
    9. import org.springframework.security.core.userdetails.UsernameNotFoundException;
    10. import org.springframework.stereotype.Service;
    11. import java.util.HashSet;
    12. import java.util.Set;
    13. /**
    14. * 用户验证处理
    15. * @author javachen
    16. */
    17. @Service
    18. public class UserDetailsServiceImpl implements UserDetailsService
    19. {
    20. private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
    21. @Override
    22. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
    23. {
    24. SysUser sysUser = new SysUser();
    25. sysUser.setId(123L);
    26. sysUser.setUserName("zhangsan");
    27. sysUser.setPassword("$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2");
    28. SysRole sysRole = new SysRole();
    29. sysRole.setId(1L);
    30. sysRole.setName("123");
    31. sysRole.setPermissionStr("rolePer");
    32. Set str = new HashSet<>();
    33. str.add("per");
    34. return new LoginUser(sysUser,sysRole,str);
    35. }
    36. }
  • 相关阅读:
    浅析TSINGSEE青犀视频AI智能分析网关车辆检测/车牌识别算法及应用场景
    ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测
    JAVA JVM 是怎么判定对象已经“死去”?
    【数组拷贝+二维数组遍历】
    浏览器执行原理-V8引擎
    设置Ubuntu 20.04的静态IP地址(wifi模式下)
    最新文章合集
    el-form动态检验rules
    【cpolar】搭建我的世界Java版服务器,公网远程联机
    十一.EtherCAT开发之microchip MCU D51+ LAN9253 的开发FOE应用(SPI directly 模式)
  • 原文地址:https://blog.csdn.net/u013008898/article/details/126754520