zoukankan      html  css  js  c++  java
  • Shiro入门2

    在上一篇博文中,通过ssm+shiro,可以实现对页面的访问控制,user:"zhang3"角色是"admin",但是没有给他分配"productManager"的角色,所以他可以访问"查看产品","删除订单",但是访问"删除产品"时会提示

     而user:“li4”拥有"productManager"的角色,所以他可以访问"删除产品",却不能访问"删除订单"。

    这样一来就实现了权限的分配。

    但是这个权限的分配过程,是通过在控制器对应方法上添加@RequirePermission和@RequiredRoles注解实现的。

    真正项目开发的时候,这种方式就很有局限性了,当权限配置关系发生变化,每次都要修改代码,编译打包重启系统,这肯定是不能够被接受的。
    所以,最好的方式,还是通过动态配置,哪个给不同的用户配置不同的角色,权限,修改之后立马生效这种方式。 为了实现这个效果,就需要基于URL配置的方式来做了。

    接下来要做基于URL配置权限的讲解。 但是基于URL配置权限需要自己能够进行权限信息的灵活配置,那么就需要对权限信息一套进行维护。

    到这里先看一下整个项目的结构:

    1.对表结构进行调整

    主要是增加了一些字段

     1 DROP DATABASE IF EXISTS shiro;
     2 CREATE DATABASE shiro DEFAULT CHARACTER SET utf8;
     3 USE shiro;
     4    
     5 drop table if exists user;
     6 drop table if exists role;
     7 drop table if exists permission;
     8 drop table if exists user_role;
     9 drop table if exists role_permission;
    10    
    11 create table user (
    12   id bigint auto_increment,
    13   name varchar(100),
    14   password varchar(100),
    15   salt varchar(100),
    16   constraint pk_users primary key(id)
    17 ) charset=utf8 ENGINE=InnoDB;
    18    
    19 create table role (
    20   id bigint auto_increment,
    21   name varchar(100),
    22   desc_ varchar(100),
    23   constraint pk_roles primary key(id)
    24 ) charset=utf8 ENGINE=InnoDB;
    25    
    26 create table permission (
    27   id bigint auto_increment,
    28   name varchar(100),
    29   desc_ varchar(100),
    30   url varchar(100), 
    31   constraint pk_permissions primary key(id)
    32 ) charset=utf8 ENGINE=InnoDB;
    33    
    34 create table user_role (
    35   id bigint auto_increment,
    36   uid bigint,
    37   rid bigint,
    38   constraint pk_users_roles primary key(id)
    39 ) charset=utf8 ENGINE=InnoDB;
    40    
    41 create table role_permission (
    42   id bigint auto_increment,
    43   rid bigint,
    44   pid bigint,
    45   constraint pk_roles_permissions primary key(id)
    46 ) charset=utf8 ENGINE=InnoDB;
    View Code
     1 INSERT INTO `permission` VALUES (1,'addProduct','增加产品','/addProduct');
     2 INSERT INTO `permission` VALUES (2,'deleteProduct','删除产品','/deleteProduct');
     3 INSERT INTO `permission` VALUES (3,'editeProduct','编辑产品','/editeProduct');
     4 INSERT INTO `permission` VALUES (4,'updateProduct','修改产品','/updateProduct');
     5 INSERT INTO `permission` VALUES (5,'listProduct','查看产品','/listProduct');
     6 INSERT INTO `permission` VALUES (6,'addOrder','增加订单','/addOrder');
     7 INSERT INTO `permission` VALUES (7,'deleteOrder','删除订单','/deleteOrder');
     8 INSERT INTO `permission` VALUES (8,'editeOrder','编辑订单','/editeOrder');
     9 INSERT INTO `permission` VALUES (9,'updateOrder','修改订单','/updateOrder');
    10 INSERT INTO `permission` VALUES (10,'listOrder','查看订单','/listOrder');
    11 INSERT INTO `role` VALUES (1,'admin','超级管理员');
    12 INSERT INTO `role` VALUES (2,'productManager','产品管理员');
    13 INSERT INTO `role` VALUES (3,'orderManager','订单管理员');
    14 INSERT INTO `role_permission` VALUES (1,1,1);
    15 INSERT INTO `role_permission` VALUES (2,1,2);
    16 INSERT INTO `role_permission` VALUES (3,1,3);
    17 INSERT INTO `role_permission` VALUES (4,1,4);
    18 INSERT INTO `role_permission` VALUES (5,1,5);
    19 INSERT INTO `role_permission` VALUES (6,1,6);
    20 INSERT INTO `role_permission` VALUES (7,1,7);
    21 INSERT INTO `role_permission` VALUES (8,1,8);
    22 INSERT INTO `role_permission` VALUES (9,1,9);
    23 INSERT INTO `role_permission` VALUES (10,1,10);
    24 INSERT INTO `role_permission` VALUES (11,2,1);
    25 INSERT INTO `role_permission` VALUES (12,2,2);
    26 INSERT INTO `role_permission` VALUES (13,2,3);
    27 INSERT INTO `role_permission` VALUES (14,2,4);
    28 INSERT INTO `role_permission` VALUES (15,2,5);
    29 INSERT INTO `role_permission` VALUES (50,3,10);
    30 INSERT INTO `role_permission` VALUES (51,3,9);
    31 INSERT INTO `role_permission` VALUES (52,3,8);
    32 INSERT INTO `role_permission` VALUES (53,3,7);
    33 INSERT INTO `role_permission` VALUES (54,3,6);
    34 INSERT INTO `role_permission` VALUES (55,3,1);
    35 INSERT INTO `role_permission` VALUES (56,5,11);
    36 INSERT INTO `user` VALUES (1,'zhang3','a7d59dfc5332749cb801f86a24f5f590','e5ykFiNwShfCXvBRPr3wXg==');
    37 INSERT INTO `user` VALUES (2,'li4','43e28304197b9216e45ab1ce8dac831b','jPz19y7arvYIGhuUjsb6sQ==');
    38 INSERT INTO `user_role` VALUES (43,2,2);
    39 INSERT INTO `user_role` VALUES (45,1,1);
    View Code

    2.导入逆向工程需要的jar

    1  <dependency>
    2         <groupId>org.mybatis.generator</groupId>
    3         <artifactId>mybatis-generator-core</artifactId>
    4         <version>1.3.7</version>
    5  </dependency>

    3.generatorConfig.xml

    用于指定需要生成哪些表的文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 <generatorConfiguration>
     6 
     7     <context id="DB2Tables"    targetRuntime="MyBatis3">
     8 
     9         <!--是否在代码中去掉注释-->
    10         <commentGenerator>
    11             <property name="suppressDate" value="true" />
    12             <property name="suppressAllComments" value="true" />
    13         </commentGenerator>
    14 
    15         <!--数据库链接地址账号密码-->
    16         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/shiro" userId="root" password="root">
    17         </jdbcConnection>
    18         <!--不知道做什么用的。。。反正贴上来了~-->
    19         <javaTypeResolver>
    20             <property name="forceBigDecimals" value="false"/>
    21         </javaTypeResolver>
    22         <!--生成pojo类存放位置-->
    23         <javaModelGenerator targetPackage="com.vi.entity" targetProject="src">
    24             <property name="enableSubPackages" value="true"/>
    25             <property name="trimStrings" value="true"/>
    26         </javaModelGenerator>
    27         <!--生成xml映射文件存放位置-->
    28         <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/mapper">
    29             <property name="enableSubPackages" value="true"/>
    30         </sqlMapGenerator>
    31         <!--生成mapper类存放位置-->
    32         <javaClientGenerator type="XMLMAPPER" targetPackage="com.vi.mapper" targetProject="src">
    33             <property name="enableSubPackages" value="true"/>
    34         </javaClientGenerator>
    35 
    36         <!--生成对应表及类名-->
    37         <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
    38             <property name="my.isgen.usekeys" value="true"/>
    39             <property name="useActualColumnNames" value="true"/>
    40             <generatedKey column="id" sqlStatement="JDBC"/>
    41         </table>
    42         <table tableName="role" domainObjectName="Role" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
    43             <property name="my.isgen.usekeys" value="true"/>
    44             <property name="useActualColumnNames" value="true"/>
    45             <generatedKey column="id" sqlStatement="JDBC"/>
    46         </table>
    47         <table tableName="permission" domainObjectName="Permission" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
    48             <property name="my.isgen.usekeys" value="true"/>
    49             <property name="useActualColumnNames" value="true"/>
    50             <generatedKey column="id" sqlStatement="JDBC"/>
    51         </table>
    52         <table tableName="user_role" domainObjectName="UserRole" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
    53             <property name="my.isgen.usekeys" value="true"/>
    54             <property name="useActualColumnNames" value="true"/>
    55             <generatedKey column="id" sqlStatement="JDBC"/>
    56         </table>
    57         <table tableName="role_permission" domainObjectName="RolePermission" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
    58             <property name="my.isgen.usekeys" value="true"/>
    59             <property name="useActualColumnNames" value="true"/>
    60             <generatedKey column="id" sqlStatement="JDBC"/>
    61         </table>
    62 
    63     </context>
    64 </generatorConfiguration>
    View Code

    4.MybatisGenerator

    运行这个程序以获取逆向工程生成的文件。

     1 public class MybatisGenerator {
     2     public static void main(String[] args) throws Exception {
     3 
     4         List<String> warnings = new ArrayList<String>();
     5         boolean overwrite = true;
     6         InputStream is= MybatisGenerator.class.getClassLoader().getResource("generatorConfig.xml").openStream();
     7         ConfigurationParser cp = new ConfigurationParser(warnings);
     8         Configuration config = cp.parseConfiguration(is);
     9         is.close();
    10         DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    11         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
    12         myBatisGenerator.generate(null);
    13 
    14         System.out.println("生成代码成功");
    15 
    16     }
    17 }
    View Code

    5.Service层

    UserService.java

     1 public interface UserService {
     2     /**
     3      * 根据用户名获取密码
     4      * @param name
     5      * @return
     6      */
     7     String getPassword(String name);
     8 
     9     /**
    10      * 根据用户名查找user
    11      * @param name
    12      * @return
    13      */
    14     User getByName(String name);
    15 
    16     List<User> list();
    17 
    18     void delete(Long id);
    19 
    20     void add(User user);
    21 
    22     User get(Long id);
    23 
    24     void update(User user);
    25 }
    View Code

    RoleService.java

     1 public interface RoleService {
     2     /**
     3      * 根据用户名查找角色名
     4      * @param username
     5      * @return
     6      */
     7     public Set<String> listRoleNames(String username);
     8 
     9     /**
    10      * 根据用户名查找角色
    11      * @param username
    12      * @return
    13      */
    14     public Set<Role> listRoles(String username);
    15 
    16     /**
    17      * 根据用户查找角色
    18      * @param user
    19      * @return
    20      */
    21     public Set<Role> listRoles(User user);
    22 
    23     public List<Role> list();
    24 
    25     public void add(Role role);
    26 
    27     public void delete(Long id);
    28 
    29     public Role get(Long id);
    30 
    31     public void update(Role role);
    32 }
    View Code

    UserRoleService.java

     1 public interface UserRoleService {
     2     /**
     3      * 给用户赋予对应的角色
     4      * @param user
     5      * @param roleIds
     6      */
     7     void setRoles(User user, long[] roleIds);
     8 
     9     void deleteByUser(long userId);
    10 
    11     void deleteByRole(long roleId);
    12 }
    View Code

    PermissionService.java

     1 public interface PermissionService {
     2     /**
     3      * 根据用户名查找权限名
     4      * @param username
     5      * @return
     6      */
     7     Set<String> listPermissions(String username);
     8 
     9     /**
    10      * 查询角色对应的权限
    11      * @param role
    12      * @return
    13      */
    14     List<Permission> listByRole(Role role);
    15 
    16     List<Permission> list();
    17 
    18     void add(Permission permission);
    19 
    20     void delete(Long id);
    21 
    22     Permission get(Long id);
    23 
    24     void update(Permission permission);
    25 }
    View Code

    RolePermissionService.java

     1 public interface RolePermissionService {
     2     /**
     3      * 给角色赋予对应的权限
     4      * @param role
     5      * @param permissonIds
     6      */
     7     void setPermissions(Role role, long[] permissonIds);
     8 
     9     void deleteByRole(long roleId);
    10 
    11     void deleteByPermission(long permissionId);
    12 }
    View Code

     

    ServiceImpl

    UserServiceImpl

     1 @Service
     2 public class UserServiceImpl implements UserService {
     3     @Autowired
     4     UserMapper userMapper;
     5     @Autowired
     6     UserRoleService userRoleService;
     7 
     8     @Override
     9     public String getPassword(String name) {
    10         User user = getByName(name);
    11         if (user == null) {
    12             return null;
    13         }
    14         return user.getPassword();
    15     }
    16 
    17     @Override
    18     public User getByName(String name) {
    19         UserExample example = new UserExample();
    20         example.createCriteria().andNameEqualTo(name);
    21        List<User> users =  userMapper.selectByExample(example);
    22         if (users.isEmpty()) {
    23             return null;
    24         }
    25         return users.get(0);
    26     }
    27 
    28     @Override
    29     public List<User> list() {
    30         UserExample example = new UserExample();
    31         example.setOrderByClause("id desc");
    32         return userMapper.selectByExample(example);
    33     }
    34 
    35     @Override
    36     public void delete(Long id) {
    37         userMapper.deleteByPrimaryKey(id);
    38         userRoleService.deleteByUser(id);
    39     }
    40 
    41     @Override
    42     public void add(User user) {
    43         userMapper.insert(user);
    44     }
    45 
    46     @Override
    47     public User get(Long id) {
    48         return userMapper.selectByPrimaryKey(id);
    49     }
    50 
    51     @Override
    52     public void update(User user) {
    53         userMapper.updateByPrimaryKeySelective(user);
    54     }
    55 }
    View Code
     1 @Service
     2 public class RoleServiceImpl implements RoleService {
     3     @Autowired
     4     RoleMapper roleMapper;
     5     @Autowired
     6     UserRoleMapper userRoleMapper;
     7     @Autowired
     8     UserService userService;
     9 
    10     @Override
    11     public Set<String> listRoleNames(String username) {
    12         Set<String> result = new HashSet<>();
    13         List<Role> roles = listRoles(username);
    14         for (Role role : roles) {
    15             result.add(role.getName());
    16         }
    17         return result;
    18     }
    19 
    20     @Override
    21     public List<Role> listRoles(String username) {
    22         List<Role> roles = new ArrayList<>();
    23         User user = userService.getByName(username);
    24         if(user==null)
    25             return roles;
    26         roles = listRoles(user);
    27         return roles;
    28     }
    29 
    30     @Override
    31     public List<Role> listRoles(User user) {
    32         List<Role> roles = new ArrayList<>();
    33         UserRoleExample userRoleExample = new UserRoleExample();
    34         userRoleExample.createCriteria().andUidEqualTo(user.getId());
    35         List<UserRole> userRoles = userRoleMapper.selectByExample(userRoleExample);
    36         for (UserRole userRole : userRoles) {
    37             roles.add(roleMapper.selectByPrimaryKey(userRole.getRid()));
    38 
    39         }
    40         return roles;
    41     }
    42 
    43     @Override
    44     public List<Role> list() {
    45         RoleExample example = new RoleExample();
    46         example.setOrderByClause("id desc");
    47         return roleMapper.selectByExample(example);
    48     }
    49 
    50     @Override
    51     public void add(Role role) {
    52         roleMapper.insert(role);
    53     }
    54 
    55     @Override
    56     public void delete(Long id) {
    57         roleMapper.deleteByPrimaryKey(id);
    58     }
    59 
    60     @Override
    61     public Role get(Long id) {
    62         return roleMapper.selectByPrimaryKey(id);
    63     }
    64 
    65     @Override
    66     public void update(Role role) {
    67         roleMapper.updateByPrimaryKeySelective(role);
    68     }
    69 }
    RoleServiceImpl
     1 @Service
     2 public class PermissionServiceImpl implements PermissionService {
     3     @Autowired
     4     PermissionMapper permissionMapper;
     5     @Autowired
     6     UserService userService;
     7     @Autowired
     8     RoleService roleService;
     9     @Autowired
    10     RolePermissionMapper rolePermissionMapper;
    11 
    12     @Override
    13     public Set<String> listPermissions(String username) {
    14         Set<String> result = new HashSet<>();
    15         List<Role> roles = roleService.listRoles(username);
    16         List<RolePermission> rolePermissions = new ArrayList<>();
    17         for (Role role : roles) {
    18             RolePermissionExample example = new RolePermissionExample();
    19             example.createCriteria().andRidEqualTo(role.getId());
    20             List<RolePermission> list = rolePermissionMapper.selectByExample(example);
    21             rolePermissions.addAll(list);
    22         }
    23         for (RolePermission rolePermission : rolePermissions) {
    24             Permission p = permissionMapper.selectByPrimaryKey(rolePermission.getPid());
    25             result.add(p.getName());
    26         }
    27         return result;
    28     }
    29 
    30     @Override
    31     public List<Permission> listByRole(Role role) {
    32         List<Permission> result = new ArrayList<>();
    33         RolePermissionExample example = new RolePermissionExample();
    34         example.createCriteria().andRidEqualTo(role.getId());
    35         List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(example);
    36         for (RolePermission rolePermission : rolePermissions) {
    37             result.add(permissionMapper.selectByPrimaryKey(rolePermission.getPid()));
    38         }
    39         return result;
    40     }
    41 
    42     @Override
    43     public List<Permission> list() {
    44         PermissionExample example = new PermissionExample();
    45         example.setOrderByClause("id desc");
    46         return permissionMapper.selectByExample(example);
    47     }
    48 
    49     @Override
    50     public void add(Permission permission) {
    51         permissionMapper.insert(permission);
    52     }
    53 
    54     @Override
    55     public void delete(Long id) {
    56         permissionMapper.deleteByPrimaryKey(id);
    57     }
    58 
    59     @Override
    60     public Permission get(Long id) {
    61         return permissionMapper.selectByPrimaryKey(id);
    62     }
    63 
    64     @Override
    65     public void update(Permission permission) {
    66         permissionMapper.updateByPrimaryKeySelective(permission);
    67     }
    68 }
    PermissionServiceImpl
     1 @Service
     2 public class UserRoleServiceImpl implements UserRoleService {
     3     @Autowired
     4     UserRoleMapper userRoleMapper;
     5     @Override
     6     public void setRoles(User user, long[] roleIds) {
     7         //删除当前用户所有角色
     8         UserRoleExample userRoleExample = new UserRoleExample();
     9         userRoleExample.createCriteria().andUidEqualTo(user.getId());
    10         List<UserRole> userRoles = userRoleMapper.selectByExample(userRoleExample);
    11         for (UserRole userRole : userRoles) {
    12             userRoleMapper.deleteByPrimaryKey(userRole.getId());
    13         }
    14 
    15         //设置新的角色关系
    16         if (null != roleIds) {
    17             for (long rid : roleIds) {
    18                 UserRole userRole = new UserRole();
    19                 userRole.setRid(rid);
    20                 userRole.setUid(user.getId());
    21                 userRoleMapper.insert(userRole);
    22             }
    23         }
    24     }
    25 
    26     @Override
    27     public void deleteByUser(long userId) {
    28        UserRoleExample userRoleExample = new UserRoleExample();
    29         userRoleExample.createCriteria().andUidEqualTo(userId);
    30        List<UserRole> userRoles = userRoleMapper.selectByExample(userRoleExample);
    31         for (UserRole userRole : userRoles) {
    32             userRoleMapper.deleteByPrimaryKey(userRole.getId());
    33         }
    34     }
    35 
    36     @Override
    37     public void deleteByRole(long roleId) {
    38         UserRoleExample userRoleExample = new UserRoleExample();
    39         userRoleExample.createCriteria().andRidEqualTo(roleId);
    40         List<UserRole> userRoles = userRoleMapper.selectByExample(userRoleExample);
    41         for (UserRole userRole : userRoles) {
    42             userRoleMapper.deleteByPrimaryKey(userRole.getId());
    43         }
    44     }
    45 }
    UserRoleServiceImpl
     1 @Service
     2 public class RolePermissionServiceImpl implements RolePermissionService {
     3     @Autowired
     4     RoleService roleService;
     5     @Autowired
     6     PermissionService permissionService;
     7     @Autowired
     8     RolePermissionMapper rolePermissionMapper;
     9 
    10     @Override
    11     public void setPermissions(Role role, long[] permissonIds) {
    12         //删除当前角色的所有权限
    13         RolePermissionExample rolePermissionExample = new RolePermissionExample();
    14         rolePermissionExample.createCriteria().andRidEqualTo(role.getId());
    15         List<RolePermission> list = rolePermissionMapper.selectByExample(rolePermissionExample);
    16         for (RolePermission rolePermission : list) {
    17             rolePermissionMapper.deleteByPrimaryKey(rolePermission.getId());
    18         }
    19         //设置新的权限关系
    20         if (permissonIds != null) {
    21             for (long id : permissonIds) {
    22                 RolePermission rolePermission = new RolePermission();
    23                 rolePermission.setRid(role.getId());
    24                 rolePermission.setPid(id);
    25                 rolePermissionMapper.insert(rolePermission);
    26             }
    27         }
    28     }
    29 
    30     @Override
    31     public void deleteByRole(long roleId) {
    32         RolePermissionExample rolePermissionExample = new RolePermissionExample();
    33         rolePermissionExample.createCriteria().andRidEqualTo(roleId);
    34         List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(rolePermissionExample);
    35         for (RolePermission rolePermission : rolePermissions) {
    36             rolePermissionMapper.deleteByPrimaryKey(rolePermission.getId());
    37         }
    38     }
    39 
    40     @Override
    41     public void deleteByPermission(long permissionId) {
    42         RolePermissionExample rolePermissionExample = new RolePermissionExample();
    43         rolePermissionExample.createCriteria().andPidEqualTo(permissionId);
    44         List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(rolePermissionExample);
    45         for (RolePermission rolePermission : rolePermissions) {
    46             rolePermissionMapper.deleteByPrimaryKey(rolePermission.getId());
    47         }
    48     }
    49 }
    RolePermissionServiceImpl

    6.控制层

     1 @Controller
     2 public class UserController {
     3     @Autowired
     4     UserService userService;
     5     @Autowired
     6     RoleService roleService;
     7     @Autowired
     8     UserRoleService userRoleService;
     9 
    10     @RequestMapping("/listUser")
    11     public String list(Model model) {
    12         List<User> users = userService.list();
    13         model.addAttribute("users", users);
    14         Map<User,List<Role>> user_roles = new HashMap<>();
    15         for (User user : users) {
    16             List<Role> roles = roleService.listRoles(user);
    17             user_roles.put(user, roles);
    18         }
    19         model.addAttribute("user_roles", user_roles);
    20         return "listUer";
    21     }
    22 
    23     @RequestMapping("/editUser")
    24     public String edit(Model model, long id) {
    25         List<Role> roles = roleService.list();
    26         model.addAttribute("roles", roles);
    27         User user = userService.get(id);
    28         model.addAttribute("user", user);
    29         List<Role> currentRoles = roleService.listRoles(user);
    30         model.addAttribute("currentRoles", currentRoles);
    31         return "editUser";
    32     }
    33 
    34     @RequestMapping("/deleteUser")
    35     public String delete(Model model, long id) {
    36         userService.delete(id);
    37         return "redirect:listUser";
    38     }
    39 
    40     @RequestMapping("/updateUser")
    41     public String update(User user,long[] roleIds) {
    42         userRoleService.setRoles(user,roleIds);
    43         String password = user.getPassword();
    44         //如果数据里没有密码就不用更新
    45         if (password.length() != 0) {//给输入的密码加盐加密
    46             String salt = new SecureRandomNumberGenerator().nextBytes().toString();
    47             int times = 2;
    48             String method = "md5";
    49             String encryptPassword = new SimpleHash(method, password, salt, times).toString();
    50             user.setPassword(encryptPassword);
    51             user.setSalt(salt);
    52         }
    53         userService.update(user);
    54         return "redirect:listUser";
    55     }
    56 
    57 
    58     @RequestMapping("/addUser")
    59     public String add(Model model,String name,String password) {
    60         String salt = new SecureRandomNumberGenerator().nextBytes().toString();
    61         String encryptPassword = new SimpleHash("md5", password, salt, 2).toString();
    62         User user = new User();
    63         user.setPassword(encryptPassword);
    64         user.setName(name);
    65         user.setSalt(salt);
    66         userService.add(user);
    67         model.addAttribute("user",user);
    68         return "redirect:listUser";
    69     }
    70 }

     UserController.java

     1 @Controller
     2 public class UserController {
     3     @Autowired
     4     UserService userService;
     5     @Autowired
     6     RoleService roleService;
     7     @Autowired
     8     UserRoleService userRoleService;
     9 
    10     @RequestMapping("/listUser")
    11     public String list(Model model) {
    12         List<User> users = userService.list();
    13         model.addAttribute("users", users);
    14         Map<User,List<Role>> user_roles = new HashMap<>();
    15         for (User user : users) {
    16             List<Role> roles = roleService.listRoles(user);
    17             user_roles.put(user, roles);
    18         }
    19         model.addAttribute("user_roles", user_roles);
    20         return "listUer";
    21     }
    22 
    23     @RequestMapping("/editUser")
    24     public String edit(Model model, long id) {
    25         List<Role> roles = roleService.list();
    26         model.addAttribute("roles", roles);
    27         User user = userService.get(id);
    28         model.addAttribute("user", user);
    29         List<Role> currentRoles = roleService.listRoles(user);
    30         model.addAttribute("currentRoles", currentRoles);
    31         return "editUser";
    32     }
    33 
    34     @RequestMapping("/deleteUser")
    35     public String delete(Model model, long id) {
    36         userService.delete(id);
    37         return "redirect:listUser";
    38     }
    39 
    40     @RequestMapping("/updateUser")
    41     public String update(User user,long[] roleIds) {
    42         userRoleService.setRoles(user,roleIds);
    43         String password = user.getPassword();
    44         //如果数据里没有密码就不用更新
    45         if (password.length() != 0) {//给输入的密码加盐加密
    46             String salt = new SecureRandomNumberGenerator().nextBytes().toString();
    47             int times = 2;
    48             String method = "md5";
    49             String encryptPassword = new SimpleHash(method, password, salt, times).toString();
    50             user.setPassword(encryptPassword);
    51             user.setSalt(salt);
    52         }
    53         userService.update(user);
    54         return "redirect:listUser";
    55     }
    56 
    57 
    58     @RequestMapping("/addUser")
    59     public String add(Model model,String name,String password) {
    60         String salt = new SecureRandomNumberGenerator().nextBytes().toString();
    61         String encryptPassword = new SimpleHash("md5", password, salt, 2).toString();
    62         User user = new User();
    63         user.setPassword(encryptPassword);
    64         user.setName(name);
    65         user.setSalt(salt);
    66         userService.add(user);
    67         model.addAttribute("user",user);
    68         return "redirect:listUser";
    69     }
    70 }

    RoleController.java

     1 @Controller
     2 @RequestMapping("/config")
     3 public class RoleController {
     4     @Autowired
     5     RoleService roleService;
     6     @Autowired
     7     RolePermissionService rolePermissionService;
     8     @Autowired
     9     PermissionService permissionService;
    10 
    11     @RequestMapping("/listRole")
    12     public String list(Model model) {
    13         List<Role> roles = roleService.list();
    14         model.addAttribute("roles", roles);
    15 
    16         Map<Role, List<Permission>> role_permissions = new HashMap<>();
    17         for (Role role : roles) {
    18             List<Permission> permissions = permissionService.listByRole(role);
    19             role_permissions.put(role, permissions);
    20         }
    21         return "listRole";
    22     }
    23 
    24     @RequestMapping("/editRole")
    25     public String list(Model model, long id) {
    26         Role role = roleService.get(id);
    27         model.addAttribute("role", role);
    28 
    29         List<Permission> permissions = permissionService.list();
    30         model.addAttribute("permissions", permissions);
    31 
    32         List<Permission> currentPermissions = permissionService.listByRole(role);
    33         model.addAttribute("currentPermissions", currentPermissions);
    34 
    35         return "editRole";
    36     }
    37 
    38     @RequestMapping("/updateRole")
    39     public String update(Role role, long[] permissionIds) {
    40         rolePermissionService.setPermissions(role,permissionIds);
    41         roleService.update(role);
    42         return "redirect:listRole";
    43     }
    44 
    45     @RequestMapping("/addRole")
    46     public String add(Model model, Role role) {
    47         System.out.println(role.getName());
    48         System.out.println(role.getDesc_());
    49         roleService.add(role);
    50         return "listRole";
    51     }
    52 
    53     @RequestMapping("/deleteRole")
    54     public String delete(long id) {
    55         roleService.delete(id);
    56         rolePermissionService.deleteByRole(id);
    57         return "redirect:listRole";
    58     }
    59 }

    PermissionController.java

     1 @Controller
     2 @RequestMapping("/config")
     3 public class PermissionController  {
     4     @Autowired
     5     PermissionService permissionService;
     6 
     7     @RequestMapping("/listPermission")
     8     public String list(Model model) {
     9         List<Permission> permissions = new ArrayList<>();
    10         permissions = permissionService.list();
    11         model.addAttribute("permissions", permissions);
    12         return "listPermission";
    13     }
    14 
    15     @RequestMapping("/editPermission")
    16     public String edit(Model model, long id) {
    17         Permission permission = permissionService.get(id);
    18         model.addAttribute("permission", permission);
    19         return "editPermission";
    20     }
    21 
    22     @RequestMapping("/updatePermission")
    23     public String update(Permission permission) {
    24         permissionService.update(permission);
    25         return "redirect:listPermission";
    26     }
    27 
    28     @RequestMapping("/addPermission")
    29     public String list(Permission permission) {
    30         System.out.println(permission.getName());
    31         System.out.println(permission.getDesc_());
    32         permissionService.add(permission);
    33         return "redirect:listPermission";
    34     }
    35 
    36     @RequestMapping("/deletePermission")
    37     public String list(long id) {
    38         permissionService.delete(id);
    39         return "redirect:listPermission";
    40     }
    41 }

    7.JSP

    首先准备一个menu.jsp,这个在其他的jsp中也会被用到

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: vi
     4 --%>
     5 <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" isELIgnored="false" %>
     6 <style>
     7 
     8 </style>
     9 <div class="menu" >
    10     <a href="listUser">用户管理</a>
    11     <a href="listRole">角色管理</a>
    12     <a href="listPermission">权限管理</a>
    13 </div>

    style.css

    span.desc {
        margin-left: 20px;
        color: gray;
    }
    
    div.workingDiv {
        margin: 200px auto;
        max- 1013px;
        height: 500px;
        position: relative;
    }
    
    div.workingDiv a {
        display: inline-block;
    }
    
    div.loginDiv {
        text-align: left;
    }
    
    div.errorInfo {
        color: red;
        font-size: 0.65em;
    }
    
    div.menu {
         100px;
        margin: 20px;
        text-align: center;
        float: left;
    }
    
    div.menu a {
        text-decoration: none;
        display: block;
        margin: 20px;
    }
    
    div.menu a:hover {
        color: #C40000;
    }
    
    div.right {
    
        position: absolute;
        left: 150px;
    }
    
    
    div table {
         800px;
        margin: 10px;
    }

    listUser.jsp

    <%--
      Created by IntelliJ IDEA.
      User: vi
    --%>
    <html>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    
    
    <head>
        <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
        <!--引入bootstrap-->
        <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
        <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
        <title>用户管理</title>
        <style>
            div table {
                 600px;
                margin: 10px;
            }
        </style>
    </head>
    
    <body>
    
    <div class="workingDiv">
        <%@ include file="include/menu.jsp" %>
        <div class="right">
            <table class="table table-bordered" style="500px;">
                <tr>
                    <th>id</th>
                    <th>用户名</th>
                    <th>密码</th>
                    <th>加密盐</th>
                    <th>角色</th>
                    <th>编辑</th>
                    <th>删除</th>
                </tr>
                <c:forEach items="${users}" var="user">
                    <tr>
                        <td>${user.id}</td>
                        <td>${user.name}</td>
                        <td>${fn:substring(user.password,0,5)}...</td>
                        <td>${fn:substring(user.salt,0,5)}...</td>
                        <td>
                            <c:forEach items="${user_roles[user]}" var="role">
                                ${role.name}<br>
                            </c:forEach>
                        </td>
                        <td>
                            <a href="editUser?id=${user.id}"><span class="glyphicon glyphicon-edit"></span></a>
                        </td>
                        <td>
                            <a href="deleteUser?id=${user.id}"><span class="glyphicon glyphicon-trash"></span></a>
                        </td>
                    </tr>
                </c:forEach>
            </table>
    
            <div class="addOrEdit" style="margin:10px;400px;">
                <form action="addUser" method="post">
                    <input placeholder="用户名" name="name" class="form-control" style="200px;"><br>
                    <input placeholder="密码" type="password" name="password" class="form-control" style="200px;"><br>
                    <input type="submit" value="增加" class="form-control" style="80px;">
                </form>
            </div>
        </div>
    </div>
    </body>
    </html>

    editUser.jsp

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: vi
     4 --%>
     5 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
     6 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     7 <html>
     8 <head>
     9     <title>编辑用户</title>
    10     <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
    11     <!--引入bootstrap-->
    12     <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
    13     <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
    14     <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
    15     <style>
    16         div table {
    17              600px;
    18             margin: 10px auto;
    19         }
    20 
    21         div input {
    22             margin: 10px;
    23         }
    24     </style>
    25 </head>
    26 <body>
    27 <div class="workingDiv">
    28     <%@ include file="include/menu.jsp" %>
    29 
    30     <div class="right">
    31         <div class="addOrEdit">
    32             <form action="updateUser" method="post">
    33                 用户名:<input type="text" value="${user.name}" class="form-control" style="200px"><br>
    34                 密码: <input type="password" placeholder="如果不修改请置空" value="" class="form-control"
    35                            style="200px"/><br>
    36                 配置角色:<br>
    37                 <c:forEach items="${roles}" var="role">
    38                     <c:set var="hasRole" value="fasle"></c:set>
    39                     <c:forEach items="${currentRoles}" var="curRole">
    40                         <c:if test="${role.id==curRole.id}">
    41                             <c:set var="hasRole" value="true"></c:set>
    42                         </c:if>
    43                     </c:forEach>
    44                     <input type="checkbox"  ${hasRole?'checked':''} value="${role.id}" name="roleIds">${role.name}<br>
    45                 </c:forEach>
    46                 <input type="hidden" name="id" value="${user.id}">
    47                 <input type="submit" value="修改" class="form-control" style="80px;">
    48             </form>
    49         </div>
    50     </div>
    51 </div>
    52 </body>
    53 </html>

    listRole.jsp

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: vi
     4 --%>
     5 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
     6 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     7 <html>
     8 <head>
     9     <title>角色管理</title>
    10     <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
    11     <!--引入bootstrap-->
    12     <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
    13     <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
    14     <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
    15 
    16 </head>
    17 <body>
    18 <div class="workingDiv">
    19     <%@ include file="include/menu.jsp" %>
    20     <div class="right">
    21         <table class="table table-bordered">
    22             <thead>
    23             <tr>
    24                 <th>id</th>
    25                 <th>角色名称</th>
    26                 <th width="100px">角色描述</th>
    27                 <th>权限</th>
    28                 <th width="100px">编辑
    29                 <th width="100px">删除</th>
    30             </tr>
    31             </thead>
    32             <tbody>
    33             <c:forEach items="${roles}" var="role">
    34                 <tr>
    35                     <td>${role.id}</td>
    36                     <td>${role.name}</td>
    37                     <td>${role.desc_}</td>
    38                     <td>${role_permissions[role]}</td>
    39                     <td><a href="editRole?id=${role.id}"><span class="glyphicon glyphicon-edit"></span></a></td>
    40                     <td><a href="deleteRole?id=${role.id}"><span class="glyphicon glyphicon-trash"></span></a></td>
    41                 </tr>
    42             </c:forEach>
    43             </tbody>
    44         </table>
    45         <form action="addRole" method="post">
    46             <input type="text" name="name" placeholder="角色名称" class="form-control" style="200px"/><br>
    47             <input type="text" name="desc_" placeholder="角色描述" class="form-control" style="200px"/><br>
    48             <input type="submit" value="增加" class="form-control" style="80px;"/>
    49         </form>
    50     </div>
    51 
    52 </div>
    53 
    54 </body>
    55 </html>

    editRole.jsp

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: vi
     4 --%>
     5 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
     6 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     7 
     8 <html>
     9 <head>
    10     <title>角色编辑</title>
    11     <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
    12     <!--引入bootstrap-->
    13     <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
    14     <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
    15     <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
    16 </head>
    17 <body>
    18 <div class="workingDiv">
    19     <%@ include file="include/menu.jsp" %>
    20     <div class="right">
    21         <form action="updateRole">
    22             角色名称:<input type="text" name="name" value="${role.name}" class="form-control" style="200px;"><br>
    23             角色描述:<input type="text" name="desc_" value="${role.desc_}" class="form-control" style="200px;"><br>
    24             配置权限:<br>
    25             <c:forEach items="${permissions}" var="permission">
    26                 <c:set var="hasRole" value="false"/>
    27                 <c:forEach items="${currentPermissions}" var="curPermission">
    28                     <c:if test="${permission.id==curPermission.id}">
    29                         <c:set var="hasRole" value="true"/>
    30                     </c:if>
    31                 </c:forEach>
    32                 <input type="checkbox" ${hasRole?"checked":""} value="${permission.id}" name="permissionIds">${permission.name}<br>
    33             </c:forEach>
    34             <input type="hidden" name="id" value="${role.id}">
    35             <input type="submit" value="修改" class="form-control" style="80px;margin-top:10px;">
    36         </form>
    37 
    38     </div>
    39 
    40 </div>
    41 </body>
    42 </html>

    listPermission.jsp

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: vi
     4 --%>
     5 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
     6 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     7 <html>
     8 <head>
     9     <title>权限管理</title>
    10     <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
    11     <!--引入bootstrap-->
    12     <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
    13     <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
    14     <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
    15     <style>
    16         div table {
    17              600px;
    18             margin: 10px;
    19         }
    20     </style>
    21 </head>
    22 <body>
    23 <div class="workingDiv">
    24     <%@ include file="include/menu.jsp" %>
    25     <div class="right">
    26         <table class="table table-bordered">
    27             <thead>
    28                 <tr>
    29                     <th>id</th>
    30                     <th>权限名称</th>
    31                     <th>权限描述</th>
    32                     <th>权限对应的路径</th>
    33                     <th>编辑</th>
    34                     <th>删除</th>
    35                 </tr>
    36             </thead>
    37             <tbody>
    38                 <c:forEach items="${permissions}" var="permission">
    39                     <tr>
    40                         <td>${permission.id}</td>
    41                         <td>${permission.name}</td>
    42                         <td>${permission.desc_}</td>
    43                         <td>${permission.url}</td>
    44                         <td><a href="editPermission?id=${permission.id}"><span class="glyphicon glyphicon-edit"></span></a></td>
    45                         <td><a href="deletePermission?id=${permission.id}"><span class="glyphicon glyphicon-trash"></span></a></td>
    46                     </tr>
    47                 </c:forEach>
    48             </tbody>
    49         </table>
    50 
    51         <form action="addPermission" method="post">
    52             <input type="text" name="name" placeholder="权限名称" class="form-control" style="200px;"><br>
    53             <input type="text" name="desc_" placeholder="权限描述" class="form-control" style="200px;"><br>
    54             <input type="text" name="url" placeholder="权限对应的url" class="form-control" style="200px;"><br>
    55             <input type="submit" value="增加">
    56         </form>
    57     </div>
    58 </div>
    59 </body>
    60 </html>

    editPermission.jsp

    <%--
      Created by IntelliJ IDEA.
      User: vi
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>权限编辑</title>
        <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
        <!--引入bootstrap-->
        <script type="text/javascript" src="../static/js/jquery/2.0.0/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" href="../static/css/bootstrap/3.3.6/bootstrap.css">
        <script type="text/javascript" src="../static/js/bootstrap/3.3.6/bootstrap.js"></script>
    </head>
    <body>
        <div class="workingDiv">
            <%@ include file="include/menu.jsp" %>
    
            <div class="right">
                <form action="updatePermission" method="post">
                    权限名称:<input type="text" name="name" value="${permission.name}" class="form-control" style="200px;"><br>
                    权限描述:<input type="text" name="desc_" value="${permission.desc_}" class="form-control" style="200px"><br>
                    权限对应的URL:<input type="text" name="url" value="${permission.url}" class="form-control" style="200px"><br>
                    <input type="hidden" value="${permission.id}" name="id">
                    <input type="submit" value="修改" class="form-control" style="80px;">
                </form>
            </div>
        </div>
    
    </body>
    </html>

     效果图分别如下:

    1.listUser.jsp

    2.editUser.jsp

    3.listRole.jsp

     4.editRole.jsp

    5.listPermission.jsp

     6.editPermission.jsp

    出于篇幅考虑,接下一篇:

    shiro入门3

  • 相关阅读:
    手机蓝牙各类服务对应的UUID
    Android数据传递的四种方法
    PS延迟显示的解决方法
    字符串分离函数
    利用cmd命令创建wifi热点
    我的毕业设计——无线控制平台
    只需简单一步,android自带的示例程序 BluetoothChat 变蓝牙串口助手
    volatile 关键字
    PC蓝牙开发笔记
    Jquery与CSS中的大于符号
  • 原文地址:https://www.cnblogs.com/blogforvi/p/11671372.html
Copyright © 2011-2022 走看看