shiro+ssm+md5加密+数据库最终版---------例子

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`;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值