整合shiro時,登入請求無法捕捉UnknownAccountException
阿新 • • 發佈:2019-02-14
程式碼寫累了,關於整合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); }