在使用 shiro 框架的时候, 有时候会因为登录问题找不到注销的 controller. 所以会报 404 的错误, 下面是解决办法:
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import org.apache.shiro.session.SessionException;
- import org.apache.shiro.subject.Subject;
- import org.apache.shiro.web.filter.authc.LogoutFilter;
- import org.springframework.stereotype.Service;
- /**
- * @author Abby
- *
- */
- @Service
- public class SystemLogoutFilter extends LogoutFilter {
- @Override
- protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
- // 在这里执行退出系统前需要清空的数据
- Subject subject = getSubject(request, response);
- //String redirectUrl = getRedirectUrl(request, response, subject);
- String redirectUrl="/login.jsp";
- System.out.println(redirectUrl);
- try {
- subject.logout();
- } catch (SessionException ise) {
- ise.printStackTrace();
- }
- issueRedirect(request, response, redirectUrl);
- // 返回 false 表示不执行后续的过滤器, 直接返回跳转到登录页面
- return false;
- }
- }
2. 需要在 shiro 配置文件里面添加一些新的配置, 具体配置如下:
- <property name="filters">
- <map>
- <entry key="logout" value-ref="systemLogoutFilter" />
- </map>
- </property>
- <property name="filterChainDefinitions">
- <value>
- /logout=logout
- </value>
- </property>
来源: http://www.bubuko.com/infodetail-2719008.html