解决方案 »
- 新手求教:Hibernate Annotation 的简单配置问题
- 用struts2的文件上传拦截器时,为是什么总是直接转到input了?
- servlet 中 session 存入验证码 但页面 取出来的总是 页面首次加载时的上一个 验证码
- jsp 文件下載
- JSP传特殊值问题
- itext中导出WORD报表问题
- 奶奶的快疯了,菜鸟问题,以人格担保给500分(在线等)!!!
- jsp中就没发写这样的一种方法吗?写一个能在删除数据前,进行确认的提示框。
- 类型转换的问题Integer.parseInt
- spring boot+spring cloud 如何实现多文件上传 断点上传
- 关于Servlet+JSP数据库连接的神奇问题
- 导出工程出现了问题
throws IOException {
String successUrl = null;
boolean contextRelative = true;
SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
if (savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) {
successUrl = savedRequest.getRequestUrl();
contextRelative = false;
} if (successUrl == null) {
successUrl = fallbackUrl;
} if (successUrl == null) {
throw new IllegalStateException("Success URL not available via saved request or via the " +
"successUrlFallback method parameter. One of these must be non-null for " +
"issueSuccessRedirect() to work.");
} WebUtils.issueRedirect(request, response, successUrl, null, contextRelative);
}fallbackUrl其实就是你shiroFilter bean里面设置的successUrl,但是successUrl在被fallbackUrl赋值之前就已经被savedRequest.getRequestUrl()取代了,这个也是我不明白的地方,如果真要解决,就继承FormAuthenticationFilterpublic class LoginFormAuthenticationFilter extends FormAuthenticationFilter{
protected final Logger logger = Logger.getLogger(LoginFormAuthenticationFilter.class);
@Override
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response)
throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
subject.getSession().setAttribute(SubjectUtil.CURRENT_USER, subject.getPrincipal()); //设置用户身份进session属性
logger.info("用户 "+SubjectUtil.getShiroUser(subject).toString() + " 登陆成功");
String url = this.getSuccessUrl();
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + url); //页面跳转
return false;
}然后<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="loginUrl" value="/login/loginPage"/>
<property name="successUrl" value="/login/mainPage"/>
<property name="unauthorizedUrl" value="/login/loginPage" />
<property name="securityManager" ref="securityManager"/>
<property name="filters">
<map>
<entry key="authc" value-ref="loginFormAuthenticationFilter"/>
</map>
</property>
<property name="filterChainDefinitions">
<value>
/login/loginPage = authc
/logout = logout
/public/** = anon
/** = user
</value>
</property>
</bean>
<!-- End -->
<bean id="loginFormAuthenticationFilter" class="org.ltsh.framework.security.filter.LoginFormAuthenticationFilter"/>
这里authc默认就是FormAuthenticationFilter,只要在LoginFormAuthenticationFilter的onLoginSuccess方法里重定向就可以了,不用它原来的父方法。