账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Shiro怎么一个浏览器同时登录两个账号,Session不会被覆盖?
    44
    0

    一个浏览器登录两个账号的时候,第二个账号的Session会覆盖第一个账号的Session,怎么让Shiro在每次登录的时候重写生成一个新的Session,这样可以让浏览器登录两个不同的账号。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 吃鸡四排奇葩名字 普通会员 1楼

      Shiro是一个Java安全框架,它可以为客户端和服务器端的安全检查提供一些便利。在Shiro中,可以通过实现自己的认证逻辑来实现客户端和服务器端的登录,而Session不会被覆盖。

      以下是一个简单的例子,展示了如何在Shiro中实现客户端和服务器端的登录:

      ```java import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationManager; import org.apache.shiro.authc.User; import org.apache.shiro.authc.token.Token; import org.apache.shiro.subject.Subject; import org.apache.shiro.web.SecurityUtils; import org.apache.shiro.web.ViewResolver;

      import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map;

      public class ShiroWebApplication { private final AuthenticationManager authenticationManager = SecurityUtils.getAuthenticationManager(); private final TokenManager tokenManager = SecurityUtils.getTokenManager(); private final ViewResolver viewResolver = SecurityUtils.getViewResolver();

      @Override
      public void init(String[] args) {
          authenticationManager.init(args);
          tokenManager.init(args);
          viewResolver.init(args);
      }
      
      @Override
      public void destroy() {
          authenticationManager.destroy();
          tokenManager.destroy();
          viewResolver.destroy();
      }
      
      public void login(String username, String password) {
          // 实现你的登录逻辑
          // ...
          SecurityUtils.checkPermission("USER", username, password);
      }
      
      public void logout() {
          SecurityUtils.checkPermission("USER", null, null);
      }
      
      public void isLoggedIn() {
          // 实现你的判断逻辑
          // ...
          SecurityUtils.checkPermission("USER", null, null);
      }
      
      public void logoutAllUsers() {
          SecurityUtils.checkPermission("USER", null, null);
      }
      
      // 这里只是展示了如何在一个登录请求中使用Shiro的各个组件
      // 在实际的项目中,你需要根据自己的需求来实现登录逻辑和判断逻辑
      

      } ```

      在这个例子中,我们首先通过SecurityUtils.getAuthenticationManager()SecurityUtils.getTokenManager()获取到 AuthenticationManager和TokenManager。然后,我们通过SecurityUtils.getViewResolver()获取到 ViewResolver。在login方法中,我们实现了SecurityUtils.checkPermission("USER", username, password)来检查用户是否有权限登录。在logout方法中,我们实现了SecurityUtils.checkPermission("USER", null, null)来检查用户是否可以正常注销。在isLoggedIn方法中,我们实现了SecurityUtils.checkPermission("USER", null, null)来检查用户是否可以正常浏览页面。在logoutAllUsers方法中,我们实现了SecurityUtils.checkPermission("USER", null, null)来检查用户是否可以正常注销所有的用户。

      在实际的项目中,你需要根据自己的需求来实现登录逻辑和判断逻辑。例如,你可能需要实现用户的注册、登录、注销、密码找回等功能。你可能需要实现用户的权限检查,如查看、修改、删除文件、创建、删除用户等。你可能需要实现用户的角色分配,如管理员、用户等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部