(八) shiro + spring + mybatis整合开发
2016-02-01 13:55
656 查看
1 前言 :
shiro代码参考java1234网站《一头扎进shiro》视频敲出来的,原理这些请参视频 ,
点击 下载源码
点击
下载数据库
2 项目结构图
3 代码
UserController.java
UserDaoImpl.java
DButil.java
User.xml
User.java
MyRealm.java
UserServiceImpl.java
UserService.java
AdminServlet.java
LoginServlet.java
StudentServlet.java
TeacherServlet.java
MybatitsUtil.java
log4j.properties
admin.jsp
login.jsp
unauthorized.jsp
mybatis-config.xml
applicationContext.xml
web.xml
index.jsp
pom.xml
4结果
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; @Override public User getUserByUserName(String userName) throws Exception{ User user = session.selectOne("nufront.shiro.entity.UserMapper.selectUserByUserName",userName); return user; } @Override public Set<String> getUserRolesByUserName(String userName)throws Exception { List list = session.selectList("nufront.shiro.entity.UserMapper.selectUserRolesByUserName",userName); return (Set<String>)ListUtil.listToSet(list); } @Override public 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; /** * 为当前用户授权 * */ @Override protected 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; } /** * 验证当前用户 * */ @Override protected 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 block e.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 ; @Override public User getUserByUserName(String userName)throws Exception { // TODO Auto-generated method stub return this.UserDao.getUserByUserName(userName); } @Override public Set<String> getUserRolesByUserName(String userName)throws Exception { // TODO Auto-generated method stub return this.UserDao.getUserRolesByUserName(userName); } @Override public Set<String> getUserPermissionsByUserName(String userName) throws Exception { // TODO Auto-generated method stub return 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; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("admin doGet"); req.getRequestDispatcher("/jsp/admin.jsp").forward(req, resp); } @Override protected 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; @Override protected 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); } @Override protected 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; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("student servlet"); req.getRequestDispatcher("index.jsp").forward(req, resp); } @Override protected 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; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("teacher servlet"); req.getRequestDispatcher("index.jsp").forward(req, resp); } @Override protected 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"?> <beans xmlns="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.xsd http://www.springframework.org/schema/context http://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结果
相关文章推荐
- mybatis generator eclipse插件的安装
- myeclipse相同变量的颜色高亮
- Spring 整合Hibernate
- java判断字符串中是否含有中文
- Spring MVC配置静态资源的正常访问
- Java控制台输出程序运行时间
- JAVA-使用commos-fileupload实现文件上传与下载
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- java根据IP获取用户所在地
- 使用工作集(Working Set)整理项目
- java程序 一次改变指定目录下所有文件编码(包括子目录中的文件)
- java.lang.UnsupportedOperationException: The user must supply a JDBC connection 报错
- 让android studio 支持 eclipse NDK工程
- eclipse 相关
- 在java代码中获取JVM参数(转)
- 本地方法(JNI)——从java 程序中调用C函数
- Java-基本数据类型
- Java中关于OOM的场景及解决方法(转)
- 【JavaSE】Java中多线程基本知识
- java main方法背后的故事?(转)