< groupId > org.apache.shiro </ groupId > < artifactId > shiro-spring </ artifactId > < version > 1.9.1 </ version > </ dependency >

2. 自定义Realm类 继承AuthorizingRealm 并重写相对应的方法

  1. 获取用户身份信息
  2. 调用业务层获取用户信息 (数据库)
  3. 非空判断,将数据封装返回
@Component
public class MyRealm extends AuthorizingRealm {
    @Autowired
    private UserMapper userMapper;
//    授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
//  登录
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    //1 获取用户身份信息
        String name = authenticationToken.getPrincipal().toString();
	//2 调用业务层获取用户信息 (数据库)
        User user = userMapper.selectById(name);
	//3 非空判断,将数据封装返回
        if (user != null){
            SimpleAuthenticationInfo sai = new SimpleAuthenticationInfo(
            name, user.getPassword(), ByteSource.Util.bytes("salt"), MyRealm.class.getName()
            return sai;
        return null;

3. 编写shiro配置类

配置securityManager

  1. 创建defaultWebSecurityManager 对象
  2. 创建加跨对象,设置相关属性
    2.1采用md5加密
    2.2 迭代加密次数
  3. 将加对象存储到myRealm中
  4. 将myRealm存AdefaultWebSecurityManager 对象
  5. 返回

配置shiro内置过滤器拦截范围

  1. 需要认证
  2. 不需要认证
@Configuration
public class shiroConfig {
    @Autowired
    private MyRealm myRealm;
    @Bean
    public DefaultWebSecurityManager defaultWebSecurityManager() {
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        hashedCredentialsMatcher.setHashAlgorithmName("md5");
        hashedCredentialsMatcher.setHashIterations(3);
        myRealm.setCredentialsMatcher(hashedCredentialsMatcher);
        defaultWebSecurityManager.setRealm(myRealm);
        ThreadContext.bind(defaultWebSecurityManager);
        return defaultWebSecurityManager;
    //配置shiro内置过滤器拦截范围
    @Bean
    public DefaultShiroFilterChainDefinition shiroFilterChainDefinition(){
        DefaultShiroFilterChainDefinition defaultShiroFilterChainDefinition = new DefaultShiroFilterChainDefinition();
//        需要认证
        defaultShiroFilterChainDefinition.addPathDefinition("/login","anon");
        defaultShiroFilterChainDefinition.addPathDefinition("/user","anon");
//        不需要认证
        defaultShiroFilterChainDefinition.addPathDefinition("/**","authc");
        return defaultShiroFilterChainDefinition;

4. 回到业务层通过subject.login()方法验证登录

	 Subject subject = SecurityUtils.getSubject();
        AuthenticationToken token = new UsernamePasswordToken(user.getUsername(),user.getPassword());
        try {
            subject.login(token);
        }catch (Exception e){
            e.printStackTrace();
            return ComResult.error("登录失败");
        return ComResult.success("登录成功");
                    获取用户身份信息调用业务层获取用户信息 (数据库)非空判断,将数据封装返回// 授权 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
				
Spring Cloud可以与Shiro和JWT进行整合,实现安全认证和授权功能。 Shiro是一个强大的Java安全框架,可以提供身份验证、授权、加密和会话管理等功能。Spring Cloud可以通过集成Shiro来实现安全认证和授权功能。 JWT(JSON Web Token)是一种轻量级的身份验证和授权机制,可以在不同的系统之间传递安全凭证。Spring Cloud可以通过集成JWT来实现安全认证和授权功能。 在整合Shiro和JWT时,可以使用Shiro的JWT插件来实现。该插件可以将JWT作为Shiro的身份验证和授权机制,实现无状态的认证和授权。 具体实现步骤包括: 1. 配置Shiro的安全管理器和Realm,用于身份验证和授权。 2. 配置JWT的密钥和过期时间等参数。 3. 实现自定义的JWT过滤器,用于在请求中解析JWT并进行身份验证和授权。 4. 在Spring Cloud的配置文件中配置JWT过滤器和Shiro的安全管理器等参数。 通过以上步骤,可以实现Spring Cloud与Shiro和JWT的整合,提供安全认证和授权功能。