过滤器和重定向不是我的强项.
我有Shiro设置并在Spring工作,除了我想在停留同一页面时返回无效登录的错误消息.所以我导致登录无效.我已经为ShiroFilterFactoryBean设置了一个属性,该属性应该将它发送到/ ldapLoginErr然后我映射到login.jsp然后在我的Controller中的错误函数中处理.但我得到一个404,而url指向我的基本url而不是/ ldapLoginErr或/ ldapLogin.
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<mvc:view-controller path="/ldapLogin" view-name="ldapLogin" />
<mvc:view-controller path="/ldapLoginSuccess" view-name="ldapLogin" />
<mvc:view-controller path="/ldapLoginErr" view-name="ldapLogin" />
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/ldapLogin"/>
<property name="unauthorizedUrl" value="/ldapLogin"/>
<property name="successUrl" value="/ldapLogin"/>
<property name="filterChainDefinitions">
<value>
[urls]
/** = ssl[8443],authc, customAuthFilter
[main]
/logout = logout
</value>
</property>
</bean>
@RequestMapping(value = "/ldapLogin", method = RequestMethod.GET)
public ModelAndView login(Model model, HttpSession session){
logger.debug("start login controller function");
ModelAndView mav = new ModelAndView();
return mav;
}
@RequestMapping(value = "/ldapLoginErr", method = RequestMethod.GET)
public ModelAndView loginErr(Model model, HttpSession session){
ModelAndView mav = new ModelAndView();
mav.addObject("errorMessage", msgSrc.getMessage("auth.notauth", null, null, null));
return mav;
}
@RequestMapping(value = "/ldapLoginSuccess", method = RequestMethod.GET)
public ModelAndView loginSuccess(Model model, HttpSession session){
}
The following didn't work either:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/ldapLogin"/>
<property name="unauthorizedUrl" value="/ldapLoginErr"/>
<property name="successUrl" value="/ldapLoginSuccess"/>
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
身份验证失败时,Shiro会重定向到登录页面并设置名为的请求属性shiroLoginFailure.所以在我的login.jsp页面中我添加了以下内容:
<c:if test="${shiroLoginFailure != null}">
Username or password incorrect
</c:if>
Run Code Online (Sandbox Code Playgroud)
如果您不使用JSTL和EL,则可以使用JSP scriptlet:
<%
if (request.getAttribute("shiroLoginFailure")!=null) {
%>
Username or password incorrect
<%
}
%>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |