java文件下↓
com.qf.controller
Controller层
第一个controller类:MenuController
package com.qf.controller;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MenuController {
// id ->11->张三
@RequestMapping("/item/queryItem.action")
@RequiresPermissions("item:select")
@RequiresRoles("商品管理员")
public String queryitem(){
System.out.println("queryitem----");
return "queryItem";
}
//id ->21->李四
@RequestMapping("/user/queryuser.action")
@RequiresPermissions("user:query")
@RequiresRoles("用户管理员")
public String queryuser(){
System.out.println("queryuser----");
return "queryuser";
}
}
第二个controller类:PermissionController
package com.qf.controller;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PermissionController {
//id->12->张三
@RequestMapping("/item/add.action")
@RequiresPermissions("item:create")
@RequiresRoles("商品管理员")
public String additem(){
System.out.println("additem----");
return "additem";
}
//id->13->张三
@RequestMapping("/item/editItem.action")
@RequiresPermissions("item:update")
@RequiresRoles("商品管理员")
public String editItem(){
System.out.println("editItem----");
return "editItem";
}
//id->14
@RequestMapping("/item/deleteitem.action")
@RequiresPermissions("item:delete")
public String deleteitem(){
System.out.println("deleteitem----");
return "deleteitem";
}
//id->15->张三
@RequestMapping("/item/Itemselect.action")
@RequiresPermissions("item:query")
@RequiresRoles("商品管理员")
public String Itemselect(){
System.out.println("Itemselect----");
return "Itemselect";
}
//id->22->李四
@RequestMapping("/user/adduser.action")
@RequiresPermissions("user:create")
@RequiresRoles("用户管理员")
public String adduser(){
System.out.println("adduser----");
return "adduser";
}
//id->23
@RequestMapping("/user/updateuser.action")
@RequiresPermissions("user:update")
public String updateuser(){
System.out.println("updateuser----");
return "updateuser";
}
//id->24
@RequestMapping("/user/deleteuser.action")
@RequiresPermissions("user:delete")
public String deleteuser(){
System.out.println("deleteuser----");
return "deleteuser";
}
}
第三个controller类:UserController
package com.qf.controller;
import com.qf.entity.SysUser;
import com.qf.service.SysUserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
public class UserController {
@Resource
private SysUserService sysUserService;
@RequestMapping("/tologin")
public String login(HttpServletRequest request) throws Exception{
//从FormAuthenticationFilter获得验证失败的错误信息
String failure = (String)request.getAttribute("shiroLoginFailure");
if(failure!=null){
if(UnknownAccountException.class.getName().equals(failure)){
throw new Exception("用户名错误");
}else if(IncorrectCredentialsException.class.getName().equals(failure)){
throw new Exception("密码错误");
}else {
throw new Exception("未知错误");
}
}
return "login";
}
@RequestMapping("/getusers")
public String aaa(HttpSession session){
Subject subject = SecurityUtils.getSubject();
SysUser user = (SysUser) subject.getPrincipal();
session.setAttribute("user",user);
System.out.println(session.getAttribute("user"));
return "success";
}
}
java文件下com.qf.dao
Dao层
第一个Dao层类:SysRoleMapper
package com.qf.dao;
import com.qf.entity.SysPermission;
import com.qf.entity.SysRole;
import com.qf.entity.SysUser;
import java.util.List;
public interface SysRoleMapper {
public List<String> findroles(String userid);
}
**第二个Dao层类:SysUserMapper
package com.qf.dao;
import com.qf.entity.SysPermission;
import com.qf.entity.SysRole;
import com.qf.entity.SysUser;
import java.util.List;
import java.util.Map;
public interface SysUserMapper {
public SysUser login(String name);
//根据用户id查询菜单权限
public List<SysPermission> findmenus(String roleid);
//根据用户id查询请求权限
public List<SysPermission> findPermission(String roleid);
//根据用户id查询角色列表
public List<String> findrolesByuserid(String userid);
}
java文件下com.qf.entity
专门创建数据库表对应的实体类
第一个entity类:SysPermission
package com.qf.entity;
public class SysPermission {
private int id;
private String name;
private String type;
private String url;
private String percode;//更正
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPercode() {
return percode;
}
public void setPercode(String percode) {
this.percode = percode;
}
}
第一个entity类:SysRole
package com.qf.entity;
import java.util.List;
public class SysRole {
private String id;
private String name;
private List<SysPermission> menulist;
private List<SysPermission> permissionList;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<SysPermission> getMenulist() {
return menulist;
}
public void setMenulist(List<SysPermission> menulist) {
this.menulist = menulist;
}
public List<SysPermission> getPermissionList() {
return permissionList;
}
public void setPermissionList(List<SysPermission> permissionList) {
this.permissionList = permissionList;
}
}
第一个entity类:SysUser
package com.qf.entity;
public class SysUser {
private String id;
private String userCode;
private String userName;
private String passWord;
private String salt;
private int locked;
private SysRole sysRole;
public SysRole getSysRole() {
return sysRole;
}
public void setSysRole(SysRole sysRole) {
this.sysRole = sysRole;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
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;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public int getLocked() {
return locked;
}
public void setLocked(int locked) {
this.locked = locked;
}
}
java文件下com.qf.service接口
Service层
第一个service接口:SysRoleService
package com.qf.service;
import java.util.List;
public interface SysRoleService {
//通过用户id查询角色列表
public List<String> findroles(String userid);
}
第一个接口对应的实现类:SysRoleServiceImpl(该实现类在com.qf.service.impl包下)
package com.qf.service.impl;
import com.qf.dao.SysRoleMapper;
import com.qf.service.SysRoleService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class SysRoleServiceImpl implements SysRoleService {
@Resource
private SysRoleMapper sysRoleMapper;
@Override
public List<String> findroles(String userid) {
return sysRoleMapper.findroles(userid);
}
}
第二个service接口:SysUserService
package com.qf.service;
import com.qf.entity.SysPermission;
import com.qf.entity.SysRole;
import com.qf.entity.SysUser;
import java.util.List;
public interface SysUserService {
public SysUser login(String name);
//根据用户id查询菜单权限
public List<SysPermission> findmenus(String roleid);
//根据用户id查询请求权限
public List<SysPermission> findPermission(String roleid);
}
第二个接口对应的实现类:SysUserServiceImpl(该实现类在com.qf.service.impl包下)
package com.qf.service.impl;
import com.qf.dao.SysUserMapper;
import com.qf.entity.SysPermission;
import com.qf.entity.SysRole;
import com.qf.entity.SysUser;
import com.qf.service.SysUserService;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class SysUserServiceImpl implements SysUserService {
@Resource
private SysUserMapper sysUserMapper;
@Override
public SysUser login(String name) {
//1.根据用户名查询用户信息
SysUser sysUser = sysUserMapper.login(name);
return sysUser;
}
@Override
public List<SysPermission> findmenus(String roleid) {
return sysUserMapper.findmenus(roleid);
}
@Override
public List<SysPermission> findPermission(String roleid) {
return sysUserMapper.findPermission(roleid);
}
}
java文件下com.qf.util类
第一个util类:MyFormFilter
package com.qf.util;
import com.qf.entity.SysUser;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class MyFormFilter extends FormAuthenticationFilter {
@Override
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject,
ServletRequest request, ServletResponse response) throws Exception {
//1.得到认证通过的主体
SysUser user = (SysUser) subject.getPrincipal();
//2.存储到session中
HttpServletRequest httpServletRequest = WebUtils.toHttp(request);
HttpSession session = httpServletRequest.getSession();
session.setAttribute("user1",user);
return super.onLoginSuccess(token, subject, request, response);
}
}
第二个util类:MyRealm
package com.qf.util;
import com.qf.entity.SysPermission;
import com.qf.entity.SysUser;
import com.qf.service.SysRoleService;
import com.qf.service.SysUserService;
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.apache.shiro.util.ByteSource;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
public class MyRealm extends AuthorizingRealm {
@Resource
private SysUserService sysUserService;
@Resource
private SysRoleService sysRoleService;
@Override //授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("授权");
//SimpleAuthorizationInfo 封装用户的正确的角色和访问权限的字符信息
SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();
//1.得到认证通过的用户信息
SysUser user = (SysUser) principalCollection.getPrimaryPrincipal();
//2.根据用户名查询用户权限(角色和访问权限)->调用service
List<String> rolenameList = sysRoleService.findroles(user.getId());
//2.1 添加角色列表
simpleAuthorizationInfo.addRoles(rolenameList);
//2.2 访问权限
for (String s : rolenameList) {
List<SysPermission> menulist = sysUserService.findmenus(s);
for (SysPermission sysPermission : menulist) {
simpleAuthorizationInfo.addStringPermission(sysPermission.getPercode());
// System.out.println(sysPermission.getPercode()+"-menu");
}
}
for (String s : rolenameList) {
List<SysPermission> permissions = sysUserService.findPermission(s);
for (SysPermission sysPermission : permissions) {
simpleAuthorizationInfo.addStringPermission(sysPermission.getPercode());
// System.out.println(sysPermission.getPercode()+"-perms");
}
}
return simpleAuthorizationInfo;
}
@Override //认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
String username =(String) authenticationToken.getPrincipal();//接受的是输入的用户名
SysUser user = sysUserService.login(username);
System.out.println(user+","+username);
if(user==null){
return null;
}
return new SimpleAuthenticationInfo(user,user.getPassWord(), ByteSource.Util.bytes(user.getSalt()),"myrealm");
}
}
resources文件下↓
注意上面的类都定义在java文件夹下的。下面是配置文件都定义在resources文件夹下的
在resources文件夹下创建mapper文件夹,专门装执行sql的文件
第一个xml文件:SysRoleMapper.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="com.qf.dao.SysRoleMapper">
<select id="findroles" resultType="string">
select `name` from sys_role role,sys_user_role userrole
where role.id=userrole.sys_role_id and userrole.sys_user_id=#{userid}
</select>
</mapper>
第二个xml文件:SysUserMapper.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="com.qf.dao.SysUserMapper">
<select id="login" resultType="com.qf.entity.SysUser">
select * from sys_user where usercode =#{uname}
</select>
<select id="findmenus" resultType="com.qf.entity.SysPermission">
select * from sys_permission where id in (
select sys_permission_id from sys_role_permission where sys_role_id =
( select id from sys_role where `name`=#{rolename})
) and type='menu'
</select>
<select id="findPermission" resultType="com.qf.entity.SysPermission">
select * from sys_permission where id in (
select sys_permission_id from sys_role_permission where sys_role_id =
( select id from sys_role where `name`=#{rolename})
) and type='permission'
</select>
<select id="findrolesByuserid" resultType="String">
select sys_role_id from sys_user_role
where sys_user_id =#{uid}
</select>
</mapper>
在resources文件夹下创建xml文件,注意不是resources的mapper文件夹下,是resources文件夹下
第一个xml文件: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>
<!--给类起别名-->
<typeAliases>
<!--<typeAlias type="com.entity.Student" alias="abc"></typeAlias>-->
<package name="com.qf.entity"></package>
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
第二个xml文件:mybatis-config.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--2.扫描注解包-->
<context:component-scan base-package="com.qf.controller"></context:component-scan>
<!--3.创建视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--4.加载注解驱动-->
<mvc:annotation-driven/>
<!--7.事务-->
<bean id="mytx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="db"></property>
</bean>
<tx:annotation-driven transaction-manager="mytx"></tx:annotation-driven>
<!--8.静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!-- 开启aop,对类代理 -->
<aop:config proxy-target-class="true"></aop:config>
<!-- 开启shiro注解支持 -->
<bean
class="
org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="manager" />
</bean>
</beans>
第三个xml文件:mybatis-config.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!--1.连接数据库-->
<bean id="db" class="com.alibaba.druid.pool.DruidDataSource">
<property name="password" value="root"/>
<property name="username" value="root"/>
<property name="url" value="jdbc:mysql://localhost:3306/day06"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
<!--2.扫描注解包-->
<context:component-scan base-package="com.qf.service,com.qf.util"></context:component-scan>
<!--5.创建sqlsession工厂-->
<bean id="fac" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="db"></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!--6.扫描dao层接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qf.dao"></property>
<property name="sqlSessionFactoryBeanName" value="fac"></property>
</bean>
<!--1.创建自定义realm对象-->
<bean id="myrealm" class="com.qf.util.MyRealm">
<property name="credentialsMatcher" ref="mactcher"></property>
</bean>
<!--2.创建SecurityManager-->
<bean id="manager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myrealm"></property>
</bean>
<!--3.配置shiro过滤器,id等于web.xml文件中的filter-name-->
<bean id="cc" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="manager"></property>
<property name="loginUrl" value="/tologin"></property>
<property name="unauthorizedUrl" value="/error.jsp"></property>
<property name="filterChainDefinitions">
<value>
/favicon.ico=anon
/loginout=logout
/** =authc
</value>
</property>
<!--4.修改默认过滤器-->
<property name="filters">
<map>
<entry key="authc" value-ref="myform"></entry>
</map>
</property>
</bean>
<bean id="myform" class="com.qf.util.MyFormFilter">
<property name="usernameParam" value="username"></property>
<property name="passwordParam" value="password"></property>
</bean>
<bean id="mactcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<property name="hashAlgorithmName" value="md5"/>
<property name="hashIterations" value="1"></property>
</bean>
</beans>
webapp文件夹下↓
注意上面的类都定义在java文件夹下的。资源文件都定义在resources文件夹下,下面是jsp页面和web.xml文件都放在webapp文件夹下
WEB-INF文件夹下的web.xml文件:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!--spring中父子容器的问题
子容器可以访问父容器的对象,父容器不能访问子容器的对象
DispatcherServlet加载的文件属于子容器
ContextLoaderListener加载的文件属于父容器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-shiro.xml</param-value>
</context-param>
<servlet>
<servlet-name>aa</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>aa</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>bb</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>
<filter-mapping>
<filter-name>bb</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>cc</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cc</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
第一个jsp页面:error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>权限不足</h1>
</body>
</html>
第二个jsp页面:index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h1>index.jsp</h1>
<h1>当前用户:${sessionScope.user1.userName}</h1>
<a href="/loginout">退出</a>
</body>
</html>
第三个jsp页面:login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>login.jsp</h1>
<form action="/tologin" method="post">
username:<input type="text" name="username"><br>
password:<input typ e="text" name="password"><br>
</select>
<input type="submit" name="登录">
</form>
</body>
</html>
第四个jsp页面:success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<h1>success.jsp</h1>
<h1>当前用户:${sessionScope.user1.userName}</h1>
<a href="/loginout">退出</a>
</head>
<body>
</body>
</html>
配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qf</groupId>
<artifactId>ssm0923</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>ssm0923 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<springversion>5.0.8.RELEASE</springversion>
</properties>
<dependencies>
<!-- 加入ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- MySQL依赖 start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 加入MyBatis 依赖 start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 引入Spring(包含SpringMVC) 依赖 start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springversion}</version>
</dependency>
<!-- 引用c3p0 依赖 start
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
-->
<!-- 引用插件依赖:MyBatis整合Spring,如果mybatis版本在3.4及以上版本
mybatis-spring的版本要在1.3以上 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 德鲁伊数据连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<!--处理json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<!--导出excel-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<!--javaee-->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!--文件上传下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-aspectj</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<finalName>ssm0923</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<!--配置文件的路径-->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
本案例框架结构图:
案例中的数据库表(我使用的是MySql数据库,将以下代码复制进数据库执行即可):
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`day06` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `day06`;
/*Table structure for table `sys_permission` */
DROP TABLE IF EXISTS `sys_permission`;
CREATE TABLE `sys_permission` (
`id` bigint(20) NOT NULL COMMENT '主键',
`name` varchar(128) NOT NULL COMMENT '资源名称',
`type` varchar(32) NOT NULL COMMENT '资源类型:menu,button,',
`url` varchar(128) DEFAULT NULL COMMENT '访问url地址',
`percode` varchar(128) DEFAULT NULL COMMENT '权限代码字符串',
`parentid` bigint(20) DEFAULT NULL COMMENT '父结点id',
`parentids` varchar(128) DEFAULT NULL COMMENT '父结点id列表串',
`sortstring` varchar(128) DEFAULT NULL COMMENT '排序号',
`available` char(1) DEFAULT NULL COMMENT '是否可用,1:可用,0不可用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `sys_permission` */
insert into `sys_permission`(`id`,`name`,`type`,`url`,`percode`,`parentid`,`parentids`,`sortstring`,`available`) values (1,'权限','','',NULL,0,'0/','0','1'),(11,'商品管理','menu','/item/queryItem.action',NULL,1,'0/1/','1.','1'),(12,'商品新增','permission','/item/add.action','item:create',11,'0/1/11/','','1'),(13,'商品修改','permission','/item/editItem.action','item:update',11,'0/1/11/','','1'),(14,'商品删除','permission','/item/deleteitem.action','item:delete',11,'0/1/11/','','1'),(15,'商品查询','permission','/item/Itemselect.action','item:query',11,'0/1/15/',NULL,'1'),(21,'用户管理','menu','/user/queryuser.action','user:query',1,'0/1/','2.','1'),(22,'用户新增','permission','/user/adduser.action','user:create',21,'0/1/21/','','1'),(23,'用户修改','permission','/user/updateuser.action','user:update',21,'0/1/21/','','1'),(24,'用户删除','permission','/user/deleteuser.action','user:delete',21,'0/1/21/','','1');
/*Table structure for table `sys_role` */
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` varchar(36) NOT NULL,
`name` varchar(128) NOT NULL,
`available` char(1) DEFAULT NULL COMMENT '是否可用,1:可用,0不可用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `sys_role` */
insert into `sys_role`(`id`,`name`,`available`) values ('ebc8a441-c6f9-11e4-b137-0adc305c3f28','商品管理员','1'),('ebc9d647-c6f9-11e4-b137-0adc305c3f28','用户管理员','1');
/*Table structure for table `sys_role_permission` */
DROP TABLE IF EXISTS `sys_role_permission`;
转载:https://blog.csdn.net/m0_45294725/article/details/101626120