1.重写 FormAuthenticationFilter 父类的 issueSuccessRedirect 方法
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;
public class loginFormAuthenticationFilter extends FormAuthenticationFilter {
@Override
protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {
WebUtils.issueRedirect(request, response,getSuccessUrl(), null, true);
}
}
2. 在 applicationContext-shiro.xml 中配置
<!-- 定义shiro 的 web 过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 认证提交地址,如果没有认证将会请求此地址进行认证 ,请求此地址将由 formAuthenticationFilter 进行表单认证 -->
<property name="loginUrl" value="/user/login"></property>
<!-- 没有权限 将会跳转去的 页面 -->
<property name="unauthorizedUrl" value="/refuse.jsp"></property>
<!-- 认证通过会 要跳转 的页面 -->
<property name="successUrl" value="/user/main"></property>
<!-- 安全管理器 -->
<property name="securityManager" ref="securityManager"></property>
<!-- 配置 重写的 父类方法 issueSuccessFilter 让自己重写的方法起到作用 以防止 登录成功后 不调到 successUrl 的问题 -->
<property name="filters">
<map>
<entry key="authc" value-ref="loginFormAuthenticationFilter"/>
</map>
</property>
<!-- shiro 过滤器 链配置 -->
<property name="filterChainDefinitions">
<value>
<!-- 配置 注销的地址 -->
/user/logout = logout
<!-- 配置匿名访问 -->
/js/** = anon
/images/** = anon
/css/** = anon
/refuse.jsp = anon
/fonts/** = anon
<!-- 所有地址 都需要 身份认证 -->
/** = authc
</value>
</property>
</bean>
<!-- 配置 -->
<bean id="loginFormAuthenticationFilter" class="org.aptech.own.shiro.utils.loginFormAuthenticationFilter"/>
本人做笔记使用,参考:https://blog.csdn.net/houjunkai/article/details/78818204