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整合开发相关推荐

  1. springmvc教程--整合mybatis开发(spring+springMVC+mybatis整合开发)

    一.整合mybatis 为了更好的学习 springmvc和mybatis整合开发的方法,需要将springmvc和mybatis进行整合. 整合目标:控制层采用springmvc.持久层使用myba ...

  2. java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取

    java spring+mybatis整合实现爬虫之<今日头条>搞笑动态图片爬取(详细) 原文地址原博客地址 先上效果图 抓取的动态图: 数据库: 一.此爬虫介绍 今日头条本身就是做爬虫的 ...

  3. springMVC+Spring+mybatis整合配置版与注解版

    springMVC+Spring+mybatis整合 , 使用配置版来完成: -----------------------------前端 1.创建web系统,导入jar包: spring的jar包 ...

  4. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)

    昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...

  5. ssm整合说明与模板-Spring Spring MVC Mybatis整合开发

    ssm整合说明 spring+spring mvc+mybatis 说明 源码下载 由于之前存在ssh框架,spring+struts+hibernate,其中spring负责aop与ioc,所以一般 ...

  6. mybatis学习(十一)——springmvc++spring+mybatis整合

    做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...

  7. Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解

    由于spring和hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

  8. 保姆级Spring+Mybatis整合的简单增删改查功能实现

    Springboot和Mybatis整合实现增删改查等 0.文章中pageHelper相关的操作是分页查询的东西与本文无关 1.首先创建一个Springboot的项目 1.1Java一般选择的是8,看 ...

  9. Jstorm+Spring+mybatis整合

    在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库. 在网上寻找了一下,发现storm集成 ...

最新文章

  1. 【排序】冒泡排序算法
  2. 唯品会订单分库分表的实践总结以及关键步骤--转
  3. iis vue history 配置_Vue实战——vueRouter路由的添加与配置
  4. 单词替换(信息学奥赛一本通-T1406)
  5. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
  6. 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求...
  7. pdf文件如何在线转换为jpg图片
  8. 关于折叠屏手机的适配
  9. python 等值面 插值_对离散点进行克里金插值并输出矢量等值面
  10. CRM软件成功案例解析
  11. 【计算机网络】计算机网络的组成
  12. 2008年会不会是Linux的桌面年
  13. Android and HTML5 开发手机应用
  14. HDU-4556-Stern-Brocot Tree(欧拉函数)
  15. C# /.NET6 实现语音转文字(科大讯飞语音转文字接口)
  16. 广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
  17. 大雁塔,青龙寺,樱花舞,落尘香
  18. 解决客户之间的矛盾-生米煮成熟饭
  19. C++程序员职业规划
  20. 室内定位技术WIFI,蓝牙,UWB一较高下,新导智能浅析哪家是王者

热门文章

  1. 【PAT甲级 找到出现次数过半的数字】1054 The Dominant Color (20 分) C++
  2. C语言 realloc函数 带着内存游走的函数
  3. 网络协议之:还在用HTTP代理?过时了,快试试SOCKS5
  4. linux用的那国语言,在linux上可以使用什么变成语言
  5. 怎么new一个指针_【译】Rust与智能指针
  6. python接管已经打开ie浏览器_Python selenium:使用已经打开并使用登录凭据登录的浏览器...
  7. Linux gdb多进程、多线程调试
  8. 06.search_shard_api操作
  9. 【详细分析】1023 Have Fun with Numbers (20 分)_20行代码AC
  10. linux shell删除归档_linux打怪技能方向规划,送给迷茫学习的你