[本系列文章是博主的学习笔记,而非经典教程,特此说明]
前面的内容所用的例子都是采用配置文件,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工程。
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下就可以看到如下内容,如果有遗漏,请读者认真检查。
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);
}
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
12.
创建applicationContext.xml文件,具体内容如下:
/login=anon
/admin*=authc
/student=roles[teacher]
/teacher=perms["user:create"]
13.
创建mybatis-config.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