(八) shiro + spring + mybatis整合开发
1 前言 :
shiro代码参考java1234网站《一头扎进shiro》视频敲出来的,原理这些请参视频 ,
点击 下载源码
点击 下载数据库
2 项目结构图
3 代码
UserController.java
package nufront.shiro.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import nufront.shiro.entity.User;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** 用户控制层* */
public class UserController {/*** 用户登录* */public void login(User user,HttpServletRequest request,HttpServletResponse response)throws Exception{Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(),user.getPassword());try{subject.login(token);}catch(Exception e){e.printStackTrace();request.setAttribute("messageTips", "登录失败");request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);}request.getRequestDispatcher("index.jsp").forward(request, response);}
}
UserDaoImpl.java
package nufront.shiro.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;import javax.annotation.Resource;import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;import nufront.shiro.dao.UserDao;
import nufront.shiro.db.DButil;
import nufront.shiro.entity.User;
import nufront.shiro.util.ListUtil;
import nufront.shiro.util.MybatitsUtil;@Repository("userDao")
public class UserDaoImpl implements UserDao{private SqlSessionTemplate session;@Overridepublic User getUserByUserName(String userName) throws Exception{User user = session.selectOne("nufront.shiro.entity.UserMapper.selectUserByUserName",userName);return user;}@Overridepublic Set<String> getUserRolesByUserName(String userName)throws Exception {List list = session.selectList("nufront.shiro.entity.UserMapper.selectUserRolesByUserName",userName);return (Set<String>)ListUtil.listToSet(list);}@Overridepublic Set<String> getUserPermissionsByUserName(String userName) throws Exception {List list = session.selectList("nufront.shiro.entity.UserMapper.selectUserPermissionsByUserName",userName);return (Set<String>)ListUtil.listToSet(list);}@Resource(name="sqlSessionTemplate")public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {this.session = sqlSessionTemplate;}}
UserDao.java
package nufront.shiro.dao;import java.sql.Connection;
import java.util.Set;import nufront.shiro.entity.User;public interface UserDao {public User getUserByUserName(String userName) throws Exception;public Set<String> getUserRolesByUserName(String userName) throws Exception;public Set<String> getUserPermissionsByUserName(String userName) throws Exception;}
DButil.java
package nufront.shiro.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DButil {public static Connection getConn(){Connection con = null;try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ; } String url = "jdbc:mysql://localhost:3306/shiro";String username = "root";String password = "root";try {con = DriverManager.getConnection(url, username, password);} catch (Exception se) {System.out.println("数据库连接失败!");se.printStackTrace();}return con;}public static void close(Connection conn){if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="nufront.shiro.entity.UserMapper"><select id="selectUserByUserName" parameterType="string" resultType="nufront.shiro.entity.User">SELECT * FROM users WHERE username=#{username};</select><select id="selectUserRolesByUserName" parameterType="string" resultType="String">SELECT role.roleName as role FROM users,user_role ur,role WHERE users.username=#{username} AND ur.userId=users.id AND role.id=ur.roleId;</select><select id="selectUserPermissionsByUserName" parameterType="string" resultType="String">SELECT p.permissionName as permission FROM users,user_role ur,role,permission p WHERE users.username=#{username} AND ur.userId=users.id AND role.id=ur.roleId AND p.roleId=role.id;</select>
</mapper>
User.java
package nufront.shiro.entity;public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int 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;}}
MyRealm.java
package nufront.shiro.realm;import java.sql.Connection;import javax.annotation.Resource;
import nufront.shiro.entity.User;
import nufront.shiro.service.UserService;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.stereotype.Component;public class MyRealm extends AuthorizingRealm{private UserService userService;/*** 为当前用户授权* */@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {//取得用户名String userName = (String)principals.getPrimaryPrincipal();//为当前用户授予角色和权限SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();try {simpleAuthorizationInfo.setRoles(this.userService.getUserRolesByUserName(userName));simpleAuthorizationInfo.setStringPermissions(this.userService.getUserPermissionsByUserName(userName));} catch (Exception e) {e.printStackTrace();}return simpleAuthorizationInfo;}/*** 验证当前用户* */@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//取得当前用户String userName = (String) token.getPrincipal();User user = null;try {user = this.userService.getUserByUserName(userName);if(user!=null){//将数据库用户信息保存在AuthenticationInfo以便和用户提交过来的信息做对比AuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),"");return authenticationInfo;}else{return null;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//验证用户return null;}@Resource(name="userService")public void setUserService(UserService userService) {this.userService = userService;}}
UserServiceImpl.java
package nufront.shiro.service.impl;import java.sql.Connection;
import java.util.Set;import javax.annotation.Resource;import org.springframework.stereotype.Service;import nufront.shiro.dao.impl.UserDaoImpl;
import nufront.shiro.entity.User;
import nufront.shiro.service.UserService;
import nufront.shiro.dao.UserDao;@Service("userService")
public class UserServiceImpl implements UserService{private UserDao UserDao ;@Overridepublic User getUserByUserName(String userName)throws Exception {// TODO Auto-generated method stubreturn this.UserDao.getUserByUserName(userName);}@Overridepublic Set<String> getUserRolesByUserName(String userName)throws Exception {// TODO Auto-generated method stubreturn this.UserDao.getUserRolesByUserName(userName);}@Overridepublic Set<String> getUserPermissionsByUserName(String userName) throws Exception {// TODO Auto-generated method stubreturn this.UserDao.getUserPermissionsByUserName(userName);}@Resource(name="userDao")public void setUserDao(UserDao userDao) {UserDao = userDao;}}
UserService.java
package nufront.shiro.service;import java.sql.Connection;
import java.util.Set;import nufront.shiro.entity.User;public interface UserService {public User getUserByUserName(String userName) throws Exception;public Set<String> getUserRolesByUserName(String userName) throws Exception;public Set<String> getUserPermissionsByUserName(String userName) throws Exception;}
AdminServlet.java
/*** */
package nufront.shiro.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author Administrator**/
public class AdminServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("admin doGet");req.getRequestDispatcher("/jsp/admin.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}}
LoginServlet.java
/*** */
package nufront.shiro.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;/*** @author Administrator**/
public class LoginServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("loginServlet doGet");String username = req.getParameter("username");String password = req.getParameter("password");Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(username,password);try{subject.login(token);}catch(Exception e){e.printStackTrace();System.out.println("here test");req.setAttribute("messageTips", "登录失败");req.getRequestDispatcher("/jsp/login.jsp").forward(req, resp);}req.getRequestDispatcher("index.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}}
StudentServlet.java
/*** */
package nufront.shiro.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;/*** @author Administrator**/
public class StudentServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("student servlet");req.getRequestDispatcher("index.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}}
TeacherServlet.java
/*** */
package nufront.shiro.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;/*** @author Administrator**/
public class TeacherServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("teacher servlet");req.getRequestDispatcher("index.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {}}
ListUtil.java
package nufront.shiro.util;import java.util.HashSet;
import java.util.List;
import java.util.Set;public class ListUtil {/*** list集合转set集合* */public static Set<String> listToSet(List list){if(list==null||list.size()==0) return null;Set<String> set = new HashSet<String>(); for(int i=0 ; i<list.size();i++){set.add((String)list.get(i));}return set;}
}
MybatitsUtil.java
package nufront.shiro.util;import java.io.Reader;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MybatitsUtil {private static SqlSessionFactory sqlSessionFactory;private static Reader reader;public static SqlSession getSession() {if(sqlSessionFactory==null){try {reader = Resources.getResourceAsReader("classpath:/mybatits/mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();return null;}}SqlSession session = sqlSessionFactory.openSession();return session;}public static void close(SqlSession session){try {if(session != null){session.close();}} catch (Exception e) {e.printStackTrace();}}}
log4j.properties
# debug config start
log4j.rootLogger=debug,stdout,log,errorlog,debuglog# degug config over###Console ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d %-5p (%F\:%L) - %m ...... %c%n### Log ###
log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
log4j.appender.log.File =log/info/info.log
log4j.appender.log.Append = true
log4j.appender.log.Threshold = INFO
log4j.appender.log.DatePattern='.'yyyy-MM-dd
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} (%F\:%L) [ %t ] %m%n
### Error ###
log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File=log/error/error.log
log4j.appender.errorlog.Append = true
log4j.appender.errorlog.Threshold = ERROR
log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd
log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlog.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} (%F\:%L) [ %t ] %m%n
### DEBUG ###
log4j.appender.debuglog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debuglog.File=log/debug/debug.log
log4j.appender.debuglog.Append = true
log4j.appender.debuglog.Threshold = DEBUG
log4j.appender.debuglog.DatePattern='.'yyyy-MM-dd
log4j.appender.debuglog.layout =org.apache.log4j.PatternLayout
log4j.appender.debuglog.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} (%F\:%L) [ %t ] %m%n
log4j.appender.stdout.Threshold=DEBUG##forbidding some package output log
log4j.logger.shiro=DEBUG
admin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'login.jsp' starting page</title></head><body>welcome to admin page </body>
</html>
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'login.jsp' starting page</title></head><body>${requestScope.messageTips }<form action="login" method="get">username : <input type="text" name="username"/><br/>password : <input type="text" name="password"/><br/><input type="submit" value="登录"/></form></body>
</html>
unauthorized.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'unauthorized.jsp' starting page</title></head><body>role not pass</body>
</html>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <mappers> <mapper resource="nufront/shiro/entity/mappers/User.xml"/> </mappers> </configuration>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><!-- 开启自动扫描 --><context:component-scan base-package="nufront.shiro"></context:component-scan> <!-- 配置数据源 --><bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.gjt.mm.mysql.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=UTF-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <!-- 配置mybatitis 开始 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /> <property name="configLocation" value="classpath:../config/mybatits/mybatis-config.xml"></property> </bean><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory" /></bean><!-- 配置mybatitis 结束 --><!-- 配置shiro 开始 --><!-- 自定义Realm --><bean id="myRealm" class="nufront.shiro.realm.MyRealm" ></bean><!-- 配置securityManager --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><property name="realm" ref="myRealm"/></bean><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager"/><property name="loginUrl" value="/jsp/login.jsp"/><!-- <property name="successUrl" value="/home.jsp"/> --><property name="unauthorizedUrl" value="/jsp/unauthorized.jsp"/> <!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean --><!-- defined will be automatically acquired and available via its beanName in chain --><!-- definitions, but you can perform instance overrides or name aliases here if you like: --><!-- <property name="filters"><util:map><entry key="anAlias" value-ref="someFilter"/></util:map></property> --><property name="filterChainDefinitions"><value>/login=anon <!-- anon为游客身份登录 -->/admin=authc <!-- authc为form需要身份认证 -->/student=roles[teacher] <!-- 请求student需要teacher角色 -->/teacher=perms[student:*] <!-- 请求teacher需要student:*权限 --></value></property></bean><!-- 保证shiro内部lifecycle函数的bean执行 --><bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/><!-- 开启shiro注解 --><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/><bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"><property name="securityManager" ref="securityManager"/></bean><!-- 配置shiro 开始 --></beans>
web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><welcome-file-list><welcome-file>/jsp/login.jsp</welcome-file></welcome-file-list><!-- 添加shiro相关配置 开始 --><!-- The filter-name matches name of a 'shiroFilter' bean inside applicationContext.xml --><filter><filter-name>shiroFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><!-- 该缺省值为false,表示生命周期默认由SpringApplicationContext管理,为true表示由ServletContainer管理 --><param-name>targetFilterLifecycle</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 添加shiro相关配置 结束 --><!-- spring配置文件 开始 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:../config/spring/applicationContext.xml</param-value></context-param><!-- 编码过滤器 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><!-- spring监听 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- spring配置文件 结束 --><!-- servlet配置 开始 --><servlet><servlet-name>loginServlet</servlet-name><servlet-class>nufront.shiro.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>loginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><servlet><servlet-name>adminServlet</servlet-name><servlet-class>nufront.shiro.servlet.AdminServlet</servlet-class></servlet><servlet-mapping><servlet-name>adminServlet</servlet-name><url-pattern>/admin</url-pattern></servlet-mapping><servlet><servlet-name>studentServlet</servlet-name><servlet-class>nufront.shiro.servlet.StudentServlet</servlet-class></servlet><servlet-mapping><servlet-name>studentServlet</servlet-name><url-pattern>/student</url-pattern></servlet-mapping><servlet><servlet-name>teacherServlet</servlet-name><servlet-class>nufront.shiro.servlet.TeacherServlet</servlet-class></servlet><servlet-mapping><servlet-name>teacherServlet</servlet-name><url-pattern>/teacher</url-pattern></servlet-mapping><!-- servlet配置 结束 -->
</web-app>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 添加shiro标签 -->
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body>index.jsp </br><!-- 假设有admin角色 --><shiro:hasRole name="admin">you have admin role</br></shiro:hasRole><shiro:hasRole name="teacher">you have teacher role</br></shiro:hasRole><!-- 假设有student:* 权限 --><shiro:hasPermission name="student:*">you have student:* permisson</br></shiro:hasPermission><!-- 假设有user:* 权限 --><shiro:hasPermission name="user:*">you have user:* permisson</br></shiro:hasPermission></body>
</html>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>shiro07_spring</groupId><artifactId>shiro07_spring</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>shiro07_spring Maven Webapp</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!-- 添加 shiro需要一些包 开始 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency> <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.2.4</version></dependency><!-- 添加 shiro需要一些包 结束 --><!-- 添加数据源 开始 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><!-- 添加数据源 结束 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency><!-- 添加spring支持 开始 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><!-- 添加spring支持 结束 --></dependencies><build><finalName>shiro07_spring</finalName></build>
</project>
4结果
(八) shiro + spring + mybatis整合开发相关推荐
- springmvc教程--整合mybatis开发(spring+springMVC+mybatis整合开发)
一.整合mybatis 为了更好的学习 springmvc和mybatis整合开发的方法,需要将springmvc和mybatis进行整合. 整合目标:控制层采用springmvc.持久层使用myba ...
- java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取
java spring+mybatis整合实现爬虫之<今日头条>搞笑动态图片爬取(详细) 原文地址原博客地址 先上效果图 抓取的动态图: 数据库: 一.此爬虫介绍 今日头条本身就是做爬虫的 ...
- springMVC+Spring+mybatis整合配置版与注解版
springMVC+Spring+mybatis整合 , 使用配置版来完成: -----------------------------前端 1.创建web系统,导入jar包: spring的jar包 ...
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...
- ssm整合说明与模板-Spring Spring MVC Mybatis整合开发
ssm整合说明 spring+spring mvc+mybatis 说明 源码下载 由于之前存在ssh框架,spring+struts+hibernate,其中spring负责aop与ioc,所以一般 ...
- mybatis学习(十一)——springmvc++spring+mybatis整合
做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...
- Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解
由于spring和hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...
- 保姆级Spring+Mybatis整合的简单增删改查功能实现
Springboot和Mybatis整合实现增删改查等 0.文章中pageHelper相关的操作是分页查询的东西与本文无关 1.首先创建一个Springboot的项目 1.1Java一般选择的是8,看 ...
- Jstorm+Spring+mybatis整合
在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库. 在网上寻找了一下,发现storm集成 ...
最新文章
- 【排序】冒泡排序算法
- 唯品会订单分库分表的实践总结以及关键步骤--转
- iis vue history 配置_Vue实战——vueRouter路由的添加与配置
- 单词替换(信息学奥赛一本通-T1406)
- QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
- 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求...
- pdf文件如何在线转换为jpg图片
- 关于折叠屏手机的适配
- python 等值面 插值_对离散点进行克里金插值并输出矢量等值面
- CRM软件成功案例解析
- 【计算机网络】计算机网络的组成
- 2008年会不会是Linux的桌面年
- Android and HTML5 开发手机应用
- HDU-4556-Stern-Brocot Tree(欧拉函数)
- C# /.NET6 实现语音转文字(科大讯飞语音转文字接口)
- 广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
- 大雁塔,青龙寺,樱花舞,落尘香
- 解决客户之间的矛盾-生米煮成熟饭
- C++程序员职业规划
- 室内定位技术WIFI,蓝牙,UWB一较高下,新导智能浅析哪家是王者
热门文章
- 【PAT甲级 找到出现次数过半的数字】1054 The Dominant Color (20 分) C++
- C语言 realloc函数 带着内存游走的函数
- 网络协议之:还在用HTTP代理?过时了,快试试SOCKS5
- linux用的那国语言,在linux上可以使用什么变成语言
- 怎么new一个指针_【译】Rust与智能指针
- python接管已经打开ie浏览器_Python selenium:使用已经打开并使用登录凭据登录的浏览器...
- Linux gdb多进程、多线程调试
- 06.search_shard_api操作
- 【详细分析】1023 Have Fun with Numbers (20 分)_20行代码AC
- linux shell删除归档_linux打怪技能方向规划,送给迷茫学习的你