shiro入门实战笔记(12)--集成Spring

[本系列文章是博主的学习笔记,而非经典教程,特此说明]

前面的内容所用的例子都是采用配置文件,Servlet来实现的,接下来的文章中,我们将来演示如何把shiro与Spring结合起来。另外,官方文档中还显示对于其他框架的支持还请有兴趣的读者自行研究学习。

准备工作:

a.操作系统:win7 x64

b.开发工具:myeclipse 2014,jdk1.7,maven3.3.3,mysql5.0,jsp基础,SpringMVC,MyBatis

-------------------------------------------------------------------------------------------------------------------------------------------------------

正文开始:

1.创建shiro11工程,工程基本结构如下图所示:注意这里我们创建Artifact为maven-archetype-webapp的maven工程。

shiro入门实战笔记(12)--集成Spring_第1张图片shiro入门实战笔记(12)--集成Spring_第2张图片

2.我们接着来引入本例中所需要的jar包,pom文件的内容如下:


  4.0.0
  com.java.shiro
  shiro11
  war
  0.0.1-SNAPSHOT
  shiro11
  http://maven.apache.org
  
    
      junit
      junit
      3.8.1
      test
    
    
    
  	
		javax.servlet
		javax.servlet-api
		3.1.0
	
	
	
		javax.servlet.jsp
		javax.servlet.jsp-api
		2.3.1
	
	
	
	
		javax.servlet
		jstl
		1.2
	
  
  	
	
  		org.springframework
  		spring-core
  		4.1.7.RELEASE
  	
  	
  		org.springframework
  		spring-beans
  		4.1.7.RELEASE
  	
  	
         org.springframework
         spring-tx
         4.1.7.RELEASE
        
  	
  		org.springframework
  		spring-context
  		4.1.7.RELEASE
  	
  	
  		org.springframework
  		spring-context-support
  		4.1.7.RELEASE
  	
  	
  	
		org.springframework
		spring-web
		4.1.7.RELEASE
	
	
	
		org.springframework
		spring-webmvc
		4.1.7.RELEASE
	
	
	
		org.springframework
		spring-aop
		4.1.7.RELEASE
	
	
	
	
		org.springframework
		spring-aspects
		4.1.7.RELEASE
	
	
	
		org.springframework
		spring-jdbc
		4.1.7.RELEASE
	
  
	  
		org.mybatis
		mybatis-spring
		1.2.3
	
	
  
  	
  	
		log4j
		log4j
		1.2.17
	
	
	
	 
		org.mybatis
		mybatis
		3.3.0
	
	
	
	
		mysql
		mysql-connector-java
		5.1.37
	
	
	
		org.apache.shiro
		shiro-core
		1.2.4
	
	
	
		org.slf4j
		slf4j-log4j12
		1.7.12
	
	
	
		org.apache.shiro
		shiro-web
		1.2.4
	
	
	
		org.apache.shiro
		shiro-spring
		1.2.4
	

  
  
    shiro11
  

写入上面的依赖,保存,maven会帮助我们自动的下载相关的包。下载号之后,我们在工程的maven dependencies下就可以看到如下内容,如果有遗漏,请读者认真检查。

shiro入门实战笔记(12)--集成Spring_第3张图片shiro入门实战笔记(12)--集成Spring_第4张图片
3.由于本例涉及的内容较多,请读者再次确认上面的基本框架,pom文件是否建立正确。

4.创建User.java文件,具体内容如下:这里的属性与数据库保持一致

package com.java.entity;
/**
 *@author 作者 E-mail:
 *@version 创建时间:2016年2月15日下午8:21:45
 *类说明
 */
public class User {
	private Integer id;
	private String userName;
	private String password;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}
5.创建UserDao.java,具体内容如下:这里我们使用了mybatis的部分知识,后续博主会更新mybatis的教程,敬请期待!

package com.java.dao;

import java.util.Set;

public interface UserDao {

	/**
	 * 通过用户名查询用户
	 * @param userName
	 * @return
	 */
	public User getByUserName(String userName);
	
	/**
	 * 通过用户名查询角色信息
	 * @param userName
	 * @return
	 */
	public Set getRoles(String userName);
	
	/**
	 * 通过用户名查询权限信息
	 * @param userName
	 * @return
	 */
	public Set getPermissions(String userName);
}

6.创建UserService.java文件,具体内容如下:

package com.java.service;

import java.util.Set;

public interface UserService {

	/**
	 * 通过用户名查询用户
	 * @param userName
	 * @return
	 */
	public User getByUserName(String userName);
	
	/**
	 * 通过用户名查询角色信息
	 * @param userName
	 * @return
	 */
	public Set getRoles(String userName);
	
	/**
	 * 通过用户名查询权限信息
	 * @param userName
	 * @return
	 */
	public Set getPermissions(String userName);
}

7. 创建UserServiceImpl.java文件,具体内容如下:
package com.java.service.impl;

import java.util.Set;
@Service("userService")
public class UserServiceImpl implements UserService{

	@Resource
	private UserDao userDao;
	
	public User getByUserName(String userName) {
		return userDao.getByUserName(userName);
	}

	public Set getRoles(String userName) {
		return userDao.getRoles(userName);
	}

	public Set getPermissions(String userName) {
		return userDao.getPermissions(userName);
	}
}
8. 创建UserController.java文件,具体内容如下:
package com.java.controller;

import javax.servlet.http.HttpServletRequest;



/**
 * 用户Controller层
 *
 */
@Controller
@RequestMapping("/user")
public class UserController {
	/**
	 * 用户登录
	 * @param user
	 * @param request
	 * @return
	 */
	@RequestMapping("/login")
	public String login(User user,HttpServletRequest request){
		Subject subject=SecurityUtils.getSubject();
		UsernamePasswordToken token=new UsernamePasswordToken(user.getUserName(), user.getPassword());
		try{
			subject.login(token);
			Session session=subject.getSession();
			System.out.println("sessionId:"+session.getId());
			System.out.println("sessionHost:"+session.getHost());
			System.out.println("sessionTimeout:"+session.getTimeout());
			session.setAttribute("info", "session的数据");
			return "redirect:/success.jsp";
		}catch(Exception e){
			e.printStackTrace();
			request.setAttribute("user", user);
			request.setAttribute("errorMsg", "用户名或密码错误!");
			return "index";
		}
	}
}
9. 创建MyRealm.java文件,具体内容如下:
package com.java.realm;


import javax.annotation.Resource;

public class MyRealm extends AuthorizingRealm{

	@Resource
	private UserService userService;
	
	/**
	 * 为当限前登录的用户授予角色和权
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		String userName=(String)principals.getPrimaryPrincipal();
		SimpleAuthorizationInfo authorizationInfo=new SimpleAuthorizationInfo();
		authorizationInfo.setRoles(userService.getRoles(userName));
		authorizationInfo.setStringPermissions(userService.getPermissions(userName));
		return authorizationInfo;
	}

	/**
	 * 验证当前登录的用户
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		String userName=(String)token.getPrincipal();
			User user=userService.getByUserName(userName);
			if(user!=null){
				AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(user.getUserName(),user.getPassword(),"xx");
				return authcInfo;
			}else{
				return null;				
			}
	}
}
10.创建web.xml文件,具体内容如下:



  Shiro11
  
    login.jsp
  
  
    
	  
	    shiroFilter  
	    org.springframework.web.filter.DelegatingFilterProxy  
      
      
    targetFilterLifecycle  
    true  
      
	  
	  
	        shiroFilter  
	        /*  
	
	
	
    
	
		contextConfigLocation
		classpath:applicationContext.xml
	
	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		true
		
			encoding
			UTF-8
		
	
	
		encodingFilter
		/*
	
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	
	
		springMVC
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring-mvc.xml
		
		1
		true
	
	
		springMVC
		*.do
	
	
	

11. 创建spring-mvc.xml文件,具体内容如下:
    
    

	
	

	
	
		
		
	

  
12. 创建applicationContext.xml文件,具体内容如下:
    
    
        
	
	
	
	
	
		
		
		
		
	

	
	
		
		
		
		
		
	

	
	
		
		
	

	
	
		
	
	
	
	  
	
	
	  
  	    
	  
	
	
	  
	      
	    
	      
	    
	      
	      
	      
	      
	          
	             	/login=anon
			/admin*=authc
			/student=roles[teacher]
			/teacher=perms["user:create"]
	          
	    
	  
	
	  
	  
	
	
	  
  		  
  	    
      
  
	  
      
          
          
              
              
              
              
              
              
              
              
              
              
              
              
              
              
              
          
      
  
      
      
          
          
      
13. 创建mybatis-config.xml文件,具体内容如下:



	
	
		
	


14. 创建U serMapper.xml 文件,具体内容如下:





	
		
		
		
	
	
	
	
	
	
	

 
15. 创建log4j.properties 文件,具体内容见shiro入门实战笔记(2)--helloworld

16.测试方法:启动tomcat,在浏览器地址栏中访问login.jsp页面,输入不同的用户名,密码。查看结果

-------------------------------------------------------------------------------------------------------------------------------------

至此,shiro入门实战笔记(12)--集成Spring结束



参考资料:

官方文档:http://shiro.apache.org/documentation.html

其他博文:http://jinnianshilongnian.iteye.com/blog/2018936



















你可能感兴趣的:(Shiro)