网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何在spring中整合shiro-创新互联

这篇文章将为大家详细讲解有关如何在spring中整合shiro,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联公司是一家专注于做网站、成都网站建设与策划设计,天峨网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:天峨等地区。天峨做网站价格咨询:13518219792

一、添加相关依赖


   org.apache.shiro
   shiro-core
   1.2.1
  
  
   org.apache.shiro
   shiro-web
   1.2.1
  
  
   org.apache.shiro
   shiro-ehcache
   1.2.1
  
  
   org.apache.shiro
   shiro-spring
   1.2.1
   
  
   commons-logging
   commons-logging
   1.2
  

二、编写代码

1、自定义realm

public class CommonRealm extends AuthorizingRealm {
 @Autowired
 private UserLoginService userLoginService;
 @Override
 public String getName() {
  return "CommonRealm";
 }
 //授权
 @Override
 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  String usernmae = (String) principals.getPrimaryPrincipal();
  List permissions = new ArrayList();
  if ("admin".equals(usernmae)) {
   permissions.add("admin:ee");
  }
  SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
  info.addStringPermissions(permissions);
  return info;
 }
 //身份认证
 @Override
 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  String username = (String) token.getPrincipal();
  User user = userLoginService.getUser(username);
  if (user == null) {
   return null;
  }
  SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, user.getPassword(), getName());
  return info;
 }
}

2、login controller

@Controller
public class UserAction {
 @Autowired
 private UserLoginService userLoginService;
 @RequestMapping("/login.do")
 public String userLogin(HttpServletRequest request, String username, String password) throws Exception {
  // 如果登陆失败从request中获取异常信息,shiroLoginFailure就是shiro异常类的全限定名
  String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");
  if (exceptionClassName != null) {
   if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
    // 最终会抛给异常处理器
    throw new XXXException("用户名不存在");
   } else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
    throw new XXXException("用户名/密码错误");
   } else {
    throw new Exception();// 最终在异常处理器生成未知错误
   }
  }
  // 如果登录成功的话不走此方法,shiro认证成功会自动跳转到上一个请求路径,配的的successUrl没效果,后边会说
  // 登陆失败走此方法,捕获异常,然后 return ~ ,还到login页面
  return "login.jsp";
 }
}

3、检测权限 controller

 //此方法为了验证权限是否生效
 @RequestMapping("/findAll.do")
 @RequiresPermissions("admin:ee")
 public ModelAndView list(HttpServletRequest request){
  ....... 
 }

三、常见问题

因为有一些特别常见的问题,需要修改xml配置,所以现在先手问题,把xml配置放在后边,直接就配置完善好的xml

问题一:登陆成功后shiro默认跳到上一次请求,没有上一次请求默认跳到/  ,那我们就想控制调到自己定义的路径咋办呢?

解决方案:

步骤一:继承FormAuthenticationFilter类,重写onLoginSuccess方法,这里可以自定义路径,因为这里自定义了成功跳转的路径,所以配置里的successUrl不用配置,赔了也没效果。。

public class LoginSuccessToFilter extends FormAuthenticationFilter {
 @Override
 protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {
  WebUtils.getAndClearSavedRequest(request);
  WebUtils.redirectToSavedRequest(request,response,"/findAll.do");
  return false;
 }
}

步骤二:

在shiro的xml配置文件中配置

 

在 shiroFilter配置中引入,完整xml在后边


  
   
    
   
  


  
   
    
   
  

四、Xml配置

applicationContext-shiro.xml


 
  
  
  
   
    
   
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   
    
    /image/** = anon
    /css/** = anon
    /js/** = anon
    /logout.do = logout
    /** = authc
   
  
 
 
 
 
  
  
  
  
  
  
  
 
 
 
 
 
 
   
  
  
  
  
 

springmvc的配置



 
 
 
 
 
  
 
 
  
 

关于如何在spring中整合shiro就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


标题名称:如何在spring中整合shiro-创新互联
分享路径:http://bjjierui.cn/article/jgpch.html

其他资讯