shiro 自定义logout路径

shiro 自定义logout路径
${adminPath}/logout = logout

shiro 登出走 LogoutFilter 过滤器,登出默认重定向到redirecUrl这个地址(/)

public class LogoutFilter extends AdviceFilter {
    
    private static final Logger log = LoggerFactory.getLogger(LogoutFilter.class);

    /**
     * The default redirect URL to where the user will be redirected after logout.  The value is {@code "/"}, Shiro's
     * representation of the web application's context root.
     */
    public static final String DEFAULT_REDIRECT_URL = "/";

    /**
     * The URL to where the user will be redirected after logout.
     */
    private String redirectUrl = DEFAULT_REDIRECT_URL;


<!-- 自定义退出路径 -->
<bean id="logout" class="org.apache.shiro.web.filter.authc.LogoutFilter">
    <property name="redirectUrl" value="/cc/zdh/getZy/?repage"/>
</bean>
 <!-- Shiro权限过滤过滤器定义 -->
<bean name="shiroFilterChainDefinitions" class="java.lang.String">
   <constructor-arg>
      <value>
         /static/** = anon
         /userfiles/** = anon
         ${adminPath}/cas = cas
         ${adminPath}/login = authc
         ${adminPath}/logout = logout
         ${adminPath}/** = user
         /act/editor/** = user
         /ReportServer/** = user
      </value>
   </constructor-arg>
</bean>

<!-- 安全认证过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
   <property name="securityManager" ref="securityManager" /><!-- 
   <property name="loginUrl" value="${cas.server.url}?service=${cas.project.url}${adminPath}/cas" /> -->
   <property name="loginUrl" value="${adminPath}/login" />
   <property name="successUrl" value="${adminPath}?login" />
   <property name="filters">
           <map>
               <entry key="cas" value-ref="casFilter"/>
               <entry key="authc" value-ref="formAuthenticationFilter"/>
               <entry key="logout" value-ref="logout" />
           </map>
       </property>
   <property name="filterChainDefinitions">
      <ref bean="shiroFilterChainDefinitions"/>
   </property>
</bean>
logout需要配置三个地方。一个是
<bean id="logout"

 一个是 filters

 <property name="filters">
           <map>
                 <entry key="logout" value-ref="logout" />
           </map>
       </property>

一个是filterChainDefinitions

<bean name="shiroFilterChainDefinitions" class="java.lang.String">
   <constructor-arg>
      <value>
         ${adminPath}/logout = logout
      </value>
   </constructor-arg>
</bean>

redirectUrl 的 value 便是自定义 logout 的路径。

其实就是重新给redirectUrl 这个属性赋了个值。

退出执行的其实是SecuityUtils.getSubject().logout()方法

// 获取当前的 Subject. 调用 SecurityUtils.getSubject();
        Subject currentUser = SecurityUtils.getSubject();
currentUser.logout();
自己写的退出,和上面的效果一样,
//前台系统登出
@RequestMapping(value = "logout")
public String logout(Model model,String xx,HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
    UserUtils.getSubject().logout();
    return "redirect:/cc/zdh/getZy/?repage";
}
//前台系统登出
@RequestMapping(value = "logout")
public String logout(Model model,String xx,HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
    UserUtils.getSubject().logout();
    return "redirect:/cc/zdh/getZy/?repage";
}