牛骨文教育服务平台(让学习变的简单)
博文笔记

整合shiro时,登录请求无法捕捉UnknownAccountException

创建时间:2017-11-19 投稿人: 浏览次数:597

代码写累了,关于整合shiro,写个文章记录下一个简单但是困扰了我好久的问题:无论登陆时包什么异常,在controll中获取的都是异常的父类AuthenticationException。

框架使用ssm,在整合shiro时,自定义一个realm,命名为MyAuthorRealm,代码和网上大部分一样,主要是配置部分出了问题,老配置如下:

(贴了半天代码。。。。这个编辑器也是够了)

<!-- Shiro安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	<property name="realms">
		<list>
			<ref bean="jdbcRealm"/>
			<ref bean="myAuthorRealm"/>
		</list>
	</property>
	<property name="cacheManager" ref="cacheManager"></property>
</bean>

这里配置了两个realm,按照顺序,shiro验证登录用户的时候会先走jdbcRealm,这时如果在MyAuthorRealm抛出throw new UnknownAccountException("用户不存在");,当捕获时却变成了它的父类AuthenticationException,在这里既然自定义了验证类MyAuthorRealm,就无需再用jdbcRealm了,去掉它,就可以正常捕获异常了:

try {
	subject.login(token);
} catch (UnknownAccountException ex) {
	map.put("message","用户名没有找到");
	return new ModelAndView("/admin/login",map);
} catch (IncorrectCredentialsException ex) {
	map.put("message","用户名密码不匹配");
	return new ModelAndView("/admin/login",map);
}catch (AuthenticationException e) {
	map.put("message","其他的登录错误");
	return new ModelAndView("/admin/login",map);
}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。