shiro+SpringMVC中根据不同身份进入不同的页面

1.首先自定义一个realm类,这个类需要继承 FormAuthenticationFilter
 
  
  1. public class MyFormAuthenticationFilte extends FormAuthenticationFilter{
  2. @Override
  3. protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request,
  4. ServletResponse response) throws Exception {
  5. //清楚缓存
  6. WebUtils.getAndClearSavedRequest(request);
  7. subject = SecurityUtils.getSubject();
  8. //取身份信息
  9. ActiveUser activeUser = (ActiveUser) subject.getPrincipal();
  10. //管理员登录入口
  11. if(activeUser.getRoleid()==3){
  12. WebUtils.redirectToSavedRequest(request, response, "/admindex");
  13. return false;
  14. //老师入口
  15. }else if(activeUser.getRoleid()==2){
  16. WebUtils.redirectToSavedRequest(request, response, "/loginvalue.action");
  17. return false;
  18. //学生管理入口
  19. }else if(activeUser.getRoleid()==1)
  20. WebUtils.redirectToSavedRequest(request, response, "/loginvalue.action");
  21. return false;
  22. }
  23. }
2.这个是登录后对异常的处理
 
   
  1. //登陆提交地址,和applicationContext-shiro.xml中配置的loginurl一致
  2. @RequestMapping("login")
  3. public String login(HttpServletRequest request)throws Exception{
  4. //如果登陆失败从request中获取认证异常信息,shiroLoginFailure就是shiro异常类的全限定名
  5. String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");
  6. //根据shiro返回的异常类路径判断,抛出指定异常信息
  7. if(exceptionClassName!=null){
  8. if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
  9. //最终会抛给异常处理器
  10. throw new CustomException("账号不存在");
  11. } else if (IncorrectCredentialsException.class.getName().equals(
  12. exceptionClassName)) {
  13. throw new CustomException("用户名/密码错误");
  14. } else {
  15. throw new Exception();//最终在异常处理器生成未知错误
  16. }
  17. }
  18. //此方法不处理登陆成功(认证成功),shiro认证成功会自动跳转到上一个请求路径
  19. //登陆失败还到login页面
  20. return "forward:/index.jsp";
  21. }



3,增加shiro 的配置文件
 
   
  1. <property name="filters">
  2. <map>
  3. <!-- 将自定义 的FormAuthenticationFilter注入shiroFilter中-->
  4. <entry key="authc" value-ref="myFormAuthenticationFilte" />
  5. </map>
  6. </property>

猜你喜欢

转载自blog.csdn.net/architect_csdn/article/details/80253149