`
dwangel
  • 浏览: 267413 次
社区版块
存档分类
最新评论

去掉shiro登录时url里的JSESSIONID

 
阅读更多
经过查找论坛和分析源码,确认了是在ShiroHttpServletResponse里加上的。
因此extends,覆盖相应方法,把添加JSESSIONID部分去掉。
public class MyShiroHttpServletResponse extends ShiroHttpServletResponse {
  public MyShiroHttpServletResponse(HttpServletResponse wrapped, ServletContext context, ShiroHttpServletRequest request) {
    super(wrapped, context, request);
  }

  @Override
  protected String toEncoded(String url, String sessionId) {
    if ((url == null) || (sessionId == null))
      return (url);

    String path = url;
    String query = "";
    String anchor = "";
    int question = url.indexOf('?');
    if (question >= 0) {
      path = url.substring(0, question);
      query = url.substring(question);
    }
    int pound = path.indexOf('#');
    if (pound >= 0) {
      anchor = path.substring(pound);
      path = path.substring(0, pound);
    }
    StringBuilder sb = new StringBuilder(path);
//    if (sb.length() > 0) { // session id param can't be first.
//      sb.append(";");
//      sb.append(DEFAULT_SESSION_ID_PARAMETER_NAME);
//      sb.append("=");
//      sb.append(sessionId);
//    }
    sb.append(anchor);
    sb.append(query);
    return (sb.toString());
  }
}



扩展ShiroFilterFactoryBean, 使用新建的MyShiroHttpServletResponse。
public class MyShiroFilterFactoryBean extends ShiroFilterFactoryBean {

  @Override
  public Class getObjectType() {
    return MySpringShiroFilter.class;
  }

  @Override
  protected AbstractShiroFilter createInstance() throws Exception {

    SecurityManager securityManager = getSecurityManager();
    if (securityManager == null) {
      String msg = "SecurityManager property must be set.";
      throw new BeanInitializationException(msg);
    }

    if (!(securityManager instanceof WebSecurityManager)) {
      String msg = "The security manager does not implement the WebSecurityManager interface.";
      throw new BeanInitializationException(msg);
    }

    FilterChainManager manager = createFilterChainManager();

    PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver();
    chainResolver.setFilterChainManager(manager);

    return new MySpringShiroFilter((WebSecurityManager) securityManager, chainResolver);
  }

  private static final class MySpringShiroFilter extends AbstractShiroFilter {

    protected MySpringShiroFilter(WebSecurityManager webSecurityManager, FilterChainResolver resolver) {
      super();
      if (webSecurityManager == null) {
        throw new IllegalArgumentException("WebSecurityManager property cannot be null.");
      }
      setSecurityManager(webSecurityManager);
      if (resolver != null) {
        setFilterChainResolver(resolver);
      }
    }

    @Override
    protected ServletResponse wrapServletResponse(HttpServletResponse orig, ShiroHttpServletRequest request) {
      return new MyShiroHttpServletResponse(orig, getServletContext(), request);
    }
  }
}

在shiro相关配置里替换成自己的MyShiroFilterFactoryBean(嗯,我是shiro和spring组合用的)
<bean id="shiroFilter" class="com.rudong.outsource.hulu.util.shiro.MyShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <!-- override these for application-specific URLs if you like:-->
        <property name="loginUrl" value="/loginform"/>
        <property name="successUrl" value="/"/>
        <property name="unauthorizedUrl" value="/unauthed"/>
<!-- ..... -->
</bean>
分享到:
评论

相关推荐

    基于Shiro 拦截URL,实现权限控制

    在实现URL权限控制时,Shiro通过定义一系列的拦截器(Interceptors)来过滤请求。这些拦截器可以基于URL路径或特定的HTTP方法(如GET、POST等)来决定是否允许用户访问。Shiro的Web模块提供了一个名为`...

    对应本博客:shiro、基于url权限管理章节的源代码

    本博客主要关注的是如何利用Shiro进行基于URL的权限管理,这对于构建一个用户友好且安全的Web系统至关重要。 **Shiro基础** 1. **身份验证(Authentication)**:这是确认用户身份的过程,通常涉及用户输入用户名...

    spring boot整合shiro实现url请求过滤

    本demo为Spring boot整合shiro,以mybatis plus做dao层交互数据,实现了读取数据库用户数据实现用户登录,权限认证,读取数据库中用户对应的url请求,实现请求的过滤。自定义了relam和过滤器来实现这些功能

    shiro登录验证实例

    shiro登录验证实例,下载包虽然是web_exception_project.zip,但是确实是shiro登录验证实例,请放心下载,另外,实例详情请访问博主博客:http://blog.csdn.net/u013142781

    SSM+shiro登录控制

    在"shiro控制使用跳转链接前必须登录"的场景下,Shiro通常会在用户尝试访问受保护资源时进行拦截。如果用户未登录,Shiro会将请求重定向到登录页面。实现这一功能的关键在于配置Shiro的Web过滤器。在`web.xml`中,...

    shiro登录拦截校验demo

    "shiro登录拦截校验demo"是一个实际应用Shiro框架进行登录验证和权限拦截的示例项目。 在该demo中,我们可以学习到以下几个核心知识点: 1. **Shiro的基本概念**: - **身份验证(Authentication)**:确认用户...

    SpringBoot整合Shiro后实现免密登录

    SpringBoot整合Shiro后实现免密登录 1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增...

    Java shiro登录验证实例

    Java shiro登录验证实例。 shiro登录验证实例,下载包虽然是web_exception_project.zip,但是确实是shiro登录验证实例,请放心下载,另外,实例详情请访问博主博客:http://blog.csdn.net/u013142781 shiro

    [免费]Shiro登录简单实例源码

    - **登录逻辑**:当用户提交登录信息时,程序会创建一个`UsernamePasswordToken`对象,然后调用`Subject.login(token)`。Shiro会根据配置的 Realm 进行身份验证。 - **权限控制**:一旦用户成功登录,Shiro可以通过...

    shiro+cas实现单点登录 示例代码,送源码分析url

    shiro+cas实现单点登录 示例代码,送源码分析url:http://note.youdao.com/noteshare?id=a83380ee8fc6913162042e865689844e&sub=CD905CCCE4134A159326DC2DFC1AF268

    shiro管理多登录入口配置,手机端登录与网页端登录

    在"shiro管理多登录入口配置,手机端登录与网页端登录"这个场景下,我们需要考虑如何为不同的登录入口(手机端和网页端)设置独立的验证流程。 首先,Shiro 的核心组件 Realm 负责与应用数据源交互,验证用户身份。...

    spring整合shiro登录小例子

    这个"spring整合shiro登录小例子"提供了一个简化的实例,展示了如何在 Spring 框架中集成 Shiro 进行用户登录验证和权限控制。下面我们将深入探讨相关的知识点。 **1. Spring 框架** Spring 是一个广泛使用的 Java ...

    shiro实现单点登录

    在IT行业中,单点登录(Single Sign-On,简称SSO)是一种身份验证机制,它允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统。Apache Shiro是一个强大且易用的Java安全框架,提供了认证...

    SpringBoot 集成 Shiro 实现动态uri权限

    在SpringBoot中集成Shiro,可以方便地进行用户权限的管理,包括登录验证、权限校验等功能。 **Vue.js** 是一个用于构建用户界面的渐进式框架,常用于前端开发。在这里,Vue可以用来动态渲染前端界面,根据后端返回...

    springmvc+shiro 实现安全登录的demo

    实现了shiro安全登录,包括密码加密匹配和登录失败次数限制的功能

    SSM整合Shiro-登录案例.zip

    当用户提交登录信息时,控制器调用Shiro的API进行认证,如果认证成功,Shiro会自动创建Subject并登录。 5. **权限控制**:在Shiro配置中定义角色和权限,然后在页面和控制器上使用Shiro的注解或标签进行权限控制。...

    shiro简单登录+logback日志记录

    《Shiro简单登录+Logback日志记录》 在现代Web开发中,权限管理和日志记录是两个不可或缺的环节。Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、会话管理和加密等功能,而Logback作为Log4j的替代...

    shiro获取登录状态和用户信息

    ### Shiro 获取登录状态与用户信息 在Java Web开发领域,Apache Shiro 是一个非常流行的权限管理框架。它提供了一套完整的认证、授权、加密和会话管理功能。本篇文章将详细介绍如何通过Shiro框架来获取用户的登录...

Global site tag (gtag.js) - Google Analytics