shiro实现未登录拦截_Shiro 安全框架登录,并实现登录人数踢出操作

    今天介绍shiro安全框架的应用,主要简介登录相关,权限控制此次不做讲解.项目框架为Springboot,Maven管理jar包.(万字,要有耐心喔5ff3fb44314826e6fbb9346f188392d1.png)

1.maven引入shiro相关依赖


         <dependency>
            <groupId>org.apache.shirogroupId>
            <artifactId>shiro-springartifactId>
            <version>${shiro-spring.version}version>
        dependency>
  
        <dependency>
            <groupId>org.crazycakegroupId>
            <artifactId>shiro-redisartifactId>
            <version>${shiro-redis.version}version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.shirogroupId>
                    <artifactId>shiro-coreartifactId>
                exclusion>
            exclusions>
        dependency>
        版本号:
         <shiro-spring.version>1.4.0shiro-spring.version>
        <shiro-redis.version>3.1.0shiro-redis.version>

2.shiro 配置类

package com.ym.auth.framework.config;

import com.ym.auth.common.utils.redis.RedisKeyUtil;
import com.ym.auth.framework.shiro.KickoutSessionControlFilter;
import com.ym.auth.framework.shiro.MySessionManager;
import com.ym.auth.framework.shiro.MyShiroRealm;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.crazycake.shiro.RedisSessionDAO;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.servlet.Filter;
import java.time.Duration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 *
 */
@Configuration
public class ShiroConfig {

  @Resource
  private RedisProperties redisProperties;

  private Duration redisExpire = Duration.ofHours(1L);


  public KickoutSessionControlFilter kickoutSessionFilter(){
    KickoutSessionControlFilter kickoutSessionFilter = new KickoutSessionControlFilter();
    //使用cacheManager获取相应的cache来缓存用户登录的会话;用于保存用户—会话之间的关系的;//这里我们还是用之前shiro使用的ehcache实现的cacheManager()缓存管理//也可以重新另写一个,重新配置缓存时间之类的自定义缓存属性//用于根据会话ID,获取会话进行踢出操作的;
    kickoutSessionFilter.setCacheManager(myCacheManager());
    kickoutSessionFilter.setSessionManager(sessionManager());
    //是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;踢出顺序。
    kickoutSessionFilter.setKickoutAfter(false);
    //同一个用户最大的会话数,默认1;比如2的意思是同一个用户允许最多同时两个人登录;
    kickoutSessionFilter.setMaxSession(5);
    //被踢出后重定向到的地址;
    kickoutSessionFilter.setKickoutUrl("/kickout");
    return kickoutSessionFilter;
  }

  @Bean
  public
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shiro框架是一个强大的安全框架,可以实现身份认证、授权和加密等功能。以下是一个使用Shiro框架实现登录接口的示例代码: ``` import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class LoginController { @PostMapping("/login") public String login(@RequestBody User user) { String username = user.getUsername(); String password = user.getPassword(); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username, password); try { subject.login(token); return "登录成功"; } catch (AuthenticationException e) { return "用户名或密码错误"; } } } ``` 在上述代码中,我们使用了Shiro框架的Subject对象,该对象表示当前用户的安全操作。我们首先获取Subject对象,然后使用用户名和密码创建一个UsernamePasswordToken对象,将其传递给Subject对象的login方法进行身份认证。 如果身份认证成功,login方法不会抛出任何异常,我们可以在返回值中返回登录成功的信息。如果身份认证失败,login方法会抛出AuthenticationException异常,我们可以在catch块中处理该异常,返回用户名或密码错误的信息。 需要注意的是,我们在上述代码中使用了@RestController注解,该注解表示该类中的所有方法都会返回JSON格式的数据。我们还使用了@PostMapping注解,该注解表示该方法只接受POST请求。在实际开发中,我们可以根据需要修改这些注解的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值