RBAC权限的SSM项目

RBAC权限的SSM项目

SSM整合

maven整合jar包

项目结构

parent管理jar包
common是通用模块(pojo,ajax等)
manager是 后台(权限系统的dao,controller,service)
parta是 前台 (未做)
web是前端页面

jar包

<dependencies>                                                              
    <dependency>                                                            
        <groupId>javax.servlet</groupId>                        
        <artifactId>servlet-api</artifactId>                          
        <version>2.5</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>javax.servlet.jsp</groupId>                        
        <artifactId>jsp-api</artifactId>                       
        <version>2.1.3-b06</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-core</artifactId>                          
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-context</artifactId>                       
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-jdbc</artifactId>                          
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-orm</artifactId>                           
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-web</artifactId>                           
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-webmvc</artifactId>                        
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>com.mchange</groupId>                                
        <artifactId>c3p0</artifactId>                                 
        <version>0.9.2</version>                                      
    </dependency>                                                           
    <dependency>                                                            
        <groupId>cglib</groupId>                                      
        <artifactId>cglib</artifactId>                               
        <version>2.2</version>                                        
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.aspectj</groupId>                                
        <artifactId>aspectjweaver</artifactId>                        
        <version>1.6.8</version>                                      
    </dependency>                                                           
                                                                                  
    <!-- Spring整合MyBatis -->                                              
    <!-- MyBatis中延迟加载需要使用Cglib -->                                 
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->         
    <dependency>                                                            
        <groupId>org.mybatis</groupId>                                
        <artifactId>mybatis</artifactId>                              
        <version>3.2.8</version>                                      
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.mybatis</groupId>                                
        <artifactId>mybatis-spring</artifactId>                       
        <version>1.2.2</version>                                      
    </dependency>                                                           
                                                                                  
    <!-- 控制日志输出:结合log4j -->                                        
    <dependency>                                                            
        <groupId>log4j</groupId>                                      
        <artifactId>log4j</artifactId>                                
        <version>1.2.17</version>                                     
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.slf4j</groupId>                                  
        <artifactId>slf4j-api</artifactId>                            
        <version>1.7.7</version>                                      
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.slf4j</groupId>                                  
        <artifactId>slf4j-log4j12</artifactId>                        
        <version>1.7.7</version>                                      
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>mysql</groupId>                                      
        <artifactId>mysql-connector-java</artifactId>                 
        <version>5.1.8</version>                                    
    </dependency>                                                           
    <dependency>                                                            
        <groupId>jstl</groupId>                                       
        <artifactId>jstl</artifactId>                                 
        <version>1.2</version>                                        
    </dependency>                                                           
                                                                                  
    <!-- ********其他****************************** -->                     
                                                                                  
    <!-- Ehcache二级缓存 -->                                                
    <dependency>                                                            
        <groupId>net.sf.ehcache</groupId>                             
        <artifactId>ehcache</artifactId>                              
        <version>1.6.2</version>                                      
    </dependency>                                                           
                                                                                  
                                                                                  
    <!-- 石英调度 - 开始 -->                                                
    <dependency>                                                            
        <groupId>org.quartz-scheduler</groupId>                       
        <artifactId>quartz</artifactId>                               
        <version>1.8.5</version>                                      
    </dependency>                                                           
    <dependency>                                                            
        <groupId>org.springframework</groupId>                        
        <artifactId>spring-context-support</artifactId>               
        <version>4.0.0.RELEASE</version>                              
    </dependency>                                                           
    <dependency>                                                            
        <groupId>commons-collections</groupId>                        
        <artifactId>commons-collections</artifactId>                  
        <version>3.1</version>                                        
    </dependency>                                                           
    <!-- 石英调度 - 结束 -->                                                
                                                                                  
    <dependency>                                                            
        <groupId>org.codehaus.jackson</groupId>                       
        <artifactId>jackson-mapper-asl</artifactId>                   
        <version>1.9.2</version>                                      
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.apache.poi</groupId>                             
        <artifactId>poi</artifactId>                                  
        <version>3.9</version>                                        
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.jfree</groupId>                                  
        <artifactId>jfreechart</artifactId>                           
        <version>1.0.19</version>                                     
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>commons-fileupload</groupId>                         
        <artifactId>commons-fileupload</artifactId>                   
        <version>1.3.1</version>                                      
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.freemarker</groupId>                             
        <artifactId>freemarker</artifactId>                           
        <version>2.3.19</version>                                     
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.activiti</groupId>                               
        <artifactId>activiti-engine</artifactId>                      
        <version>5.15.1</version>                                     
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.activiti</groupId>                               
        <artifactId>activiti-spring</artifactId>                      
        <version>5.15.1</version>                                     
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.apache.commons</groupId>                         
        <artifactId>commons-email</artifactId>                        
        <version>1.3.1</version>                                      
    </dependency>                                                           
                                                                                  
    <dependency>                                                            
        <groupId>org.activiti</groupId>                               
        <artifactId>activiti-explorer</artifactId>                    
        <version>5.15.1</version>                                     
        <exclusions>                                                        
            <exclusion>                                                     
                <artifactId>groovy-all</artifactId>                   
                <groupId>org.codehaus.groovy</groupId>                
            </exclusion>                                                    
        </exclusions>                                                       
    </dependency>                                                           
</dependencies> 

SSM整合

在web中添加spring和mybatis包

springmvc-context.xml

 <context:component-scan base-package="com.atguigu.*" use-default-filters="false" >
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven />
    <!-- 登录拦截器 -->
    <mvc:interceptors>
    	<mvc:interceptor>
    		<mvc:mapping path="/**"/>
    		<mvc:exclude-mapping path="/login"/>
    		<mvc:exclude-mapping path="/doAJAXLogin"/>
    		<mvc:exclude-mapping path="/bootstrap/**"/>
    		<mvc:exclude-mapping path="/css/**"/>
    		<mvc:exclude-mapping path="/fonts/**"/>
    		<mvc:exclude-mapping path="/img/**"/>
    		<mvc:exclude-mapping path="/jquery/**"/>
    		<mvc:exclude-mapping path="/layer/**"/>
    		<mvc:exclude-mapping path="/script/**"/>
    		<mvc:exclude-mapping path="/ztree/**"/>
    		<bean class="com.atguigu.atcrowdfunding.web.LoginInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
   	<!-- 权限拦截器 -->
    <mvc:interceptors>
    	<mvc:interceptor>
    		<mvc:mapping path="/**"/>
    		<mvc:exclude-mapping path="/login"/>
    		<mvc:exclude-mapping path="/doAJAXLogin"/>
    		<mvc:exclude-mapping path="/bootstrap/**"/>
    		<mvc:exclude-mapping path="/css/**"/>
    		<mvc:exclude-mapping path="/fonts/**"/>
    		<mvc:exclude-mapping path="/img/**"/>
    		<mvc:exclude-mapping path="/jquery/**"/>
    		<mvc:exclude-mapping path="/layer/**"/>
    		<mvc:exclude-mapping path="/script/**"/>
    		<mvc:exclude-mapping path="/ztree/**"/>
    		<bean class="com.atguigu.atcrowdfunding.web.AuthInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 乱码问题 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
        <property name="messageConverters" >
            <list>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
                    <property name="supportedMediaTypes" >
                        <list>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
    
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8" >
        <property name="maxUploadSize" value="2097152"/>
        <property name="resolveLazily" value="true"/>
    </bean>

spring-context.xml

< !-- 扫描pojo -->
<context:component-scan base-package="com.atguigu.*" >
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    < !-- 连接池和JDBC -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3307/atcrowdfunding?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
        
        
 
        <!--c3p0私有属性-->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!--关闭连接后不自动commit-->
        <property name="autoCommitOnClose" value="false"/>
 
        <!--获取连接超时时间-->
        <property name="checkoutTimeout" value="5000"/>
        <!--当获取连接失败重试次数-->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>
    
    < !-- mapper.xml扫描 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
        <property name="configLocation" value="classpath:mybatis/config.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" >
            <list>
                <value>classpath*:mybatis/mapper-*.xml</value>
            </list>
        </property>
    </bean>
    < !-- 扫描dao -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
        <property name="basePackage" value="com.atguigu.atcrowdfunding.**.dao" />
    </bean>
    < !-- 添加 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource"/>
    </bean>

 < !-- 事务 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager" >
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception" />
            <tx:method name="query*" read-only="true" />
        </tx:attributes>
    </tx:advice>    
    <aop:config>
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.atguigu..*Service.*(..))"/>
    </aop:config>

mybatis的配置文件

就一个别名配置(略)

web.xml

 <!-- spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring/spring-*.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- spring mvc -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/springmvc-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!-- 乱码 -->
  <filter>
    <filter-name>encoding</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <servlet-name>springmvc</servlet-name>
  </filter-mapping>
  
  <!-- 路径监听器 -->
  <listener>
    <listener-class>com.atguigu.atcrowdfunding.web.ServerStartupListener</listener-class>
  </listener>

路径监听器

public class ServerStartupListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce)  { 
    }

    public void contextInitialized(ServletContextEvent sce)  { 
    	ServletContext application = sce.getServletContext();
		String path = application.getContextPath();
		application.setAttribute("APP_PATH", path);
    }
	
}

前端页面

boostrap	easyUI	jQuery (弹窗)layer   (树形结构图)ztree

SQL

USER --》 role --》permission  一对多
关联表
user_role	role_permission 通过主键关联

前期

完整页面
(jQuery获取表单值并添加点击事件)
增删改查
(dao,service,controller)
AJAX实现
(data传值,success判断是否成功)
layer弹窗运用
(					存在时间		图标	特效	回调方法
layer.msg("XXX", {time:1000, icon:5, shift:6}, function() {
	});
)

分页查询和模糊查询

public Object pageQuery(String queryText ,Integer pageno ,Integer pagesize){
	通过AJAX传递数据,传入文本框搜索内容queryText,第几页pageno ,一页多少条pagesize
	AJAXResult result=new AJAXResult();
	try {
		通过map
		Map<String,Object> map=new HashMap<String,Object>();
				第一页
		map.put("start", (pageno-1)*pagesize);
				页面大小
		map.put("size", pagesize);
				搜索内容
		map.put("queryText", queryText);
		List<User> users=userService.pageQueryData(map);
			总条数
		int totalsize= userService.pageQueryCount(map);
			总页数
		int totalno = 0;
		if(totalsize % pagesize==0){
			totalno=totalsize/pagesize;
		}else {
			totalno = totalsize / pagesize + 1;
		}
				 分页工具对象
		Page<User> userPage =new Page<User>();
		userPage.setDatas(users);
		userPage.setTotalno(totalno);
		userPage.setTotalsize(totalsize);
		userPage.setPageno(pageno);
			
		result.setData(userPage);
		result.setSuccess(true);
	} catch (Exception e) {
		e.printStackTrace();
		result.setSuccess(false);
	}
	
	
	return result;
	}

SQL

pageQueryData

select 
		* 
		from t_user
		<where>
			<if test="queryText!=null">
				and loginacct like concat('%',#{queryText},'%') 
			</if>
		</where>
		order by createtime desc
		limit #{start}, #{size} 

pageQueryCount

select 
		  count(*) 
		from t_user
		<where>
			<if test="queryText!=null">
				and loginacct like concat('%',#{queryText},'%') 
			</if>
		</where>

ajax

		$("#queryBtn").click(function() {
							var queryText=$("#queryText").val();
							if(queryText==""){
								likeflg=false;
							}else{
								likeflg=true;
							}
							
							pageQuery(1);
		});
		function pageQuery(pageno) {
		            	var loadingIndex=null;
		            	
		            	var jsonData={"pageno" : pageno,"pagesize" : 10};
		                if(likeflg==true){
		                	jsonData.queryText=$("#queryText").val();
		                }
		                
		            	
						$.ajax({
							type : "POST",
							url : "${APP_PATH}/user/pageQuery",
							data : jsonData,
							beforeSend : function() {
				        		loadingIndex = layer.msg('处理中', {icon: 16});
							},
							success : function(result) {
								layer.close(loadingIndex);
								if(result.success){
									var tableContent ="";
									var pageContent ="";
									
									var userPage = result.data;
									var users = userPage.datas;
									
									$.each(users, function(i,user) {
										tableContent +='<tr>';
						                tableContent +='  <td>'+(i+1)+'</td>';
										tableContent +='  <td><input type="checkbox" name="userid" value="'+user.id+'"></td>';
						                tableContent +='  <td>'+user.loginacct+'</td>';
						                tableContent +='  <td>'+user.username+'</td>';
						                tableContent +='  <td>'+user.email+'</td>';
						                tableContent +='  <td>';
										tableContent +='      <button type="button" onclick="goAssignPage('+user.id+')" class="btn btn-success btn-xs"><i class=" glyphicon glyphicon-check"></i></button>';
										tableContent +='      <button type="button" onclick="goUpdatePage('+user.id+')" class="btn btn-primary btn-xs"><i class=" glyphicon glyphicon-pencil"></i></button>';
										tableContent +='	  <button type="button" onclick="deleteUser('+user.id+', \''+user.loginacct+'\')" class="btn btn-danger btn-xs"><i class=" glyphicon glyphicon-remove"></i></button>';
										tableContent +='  </td>';
						                tableContent +='</tr>';
									});
									
									if ( pageno > 1 ) {
		            					pageContent += '<li><a href="#" onclick="pageQuery('+(pageno-1)+')">上一页</a></li>';
		            				}
		            				
		            				for ( var i = 1; i <= userPage.totalno; i++ ) {
		            					if ( i == pageno ) {
		            						pageContent += '<li class="active"><a  href="#">'+i+'</a></li>';
		            					} else {
		            						pageContent += '<li ><a href="#" onclick="pageQuery('+i+')">'+i+'</a></li>';
		            					}
		            				}
		            				
		            				if ( pageno < userPage.totalno ) {
		            					pageContent += '<li><a href="#" onclick="pageQuery('+(pageno+1)+')">下一页</a></li>';
		            				}
		
									加载数据
									$("#userData").html(tableContent);
									$(".pagination").html(pageContent);
								}else{
									layer.msg("查询失败", {time:1000, icon:5, shift:6}, function() {
									});
								}
							}
						});
					}

小功能

全选框

		$("#allSelBox").click(function() {
					var flg=this.checked;
						$("#userData :checkbox").each(function() {
							this.checked=flg;
						});
					
		});

表单重置

$("#resetBtn").click(function() {
					$("#userForm")[0].reset();
				});

角色分配

通过ID查找用户角色

private String assign(Integer id,Model model) {
		
		User user=userService.queryById(id);
		model.addAttribute("user", user);
		
		List<Role> roles= roleService.queryAll();
		
		List<Role> assingedRoles=new ArrayList<Role>();
		List<Role> unassignRoles=new ArrayList<Role>();
										  通过ID查用户的角色(关联表)
		List<Integer> roleids=userService.queryRoleidsByUserid(id);
		循环装入已分配角色和未分配角色
		for(Role role :roles) {
			如果roleids里面有role的id,说明是已分配角色,反之就是未分配角色
			if(roleids.contains(role.getId())){
				assingedRoles.add(role);
			}else {
				unassignRoles.add(role);
			}
		}
		
		model.addAttribute("assingedRoles", assingedRoles);
		model.addAttribute("unassignRoles", unassignRoles);
		
		return "user/assign";
	}

显示

未分配角色的遍历
<label for="exampleInputPassword1">未分配角色列表</label><br>
					<select id="leftList" name="unAssignRoleIds" class="form-control" multiple size="10" style="width:200px;overflow-y:auto;">
                        <c:forEach items="${unassignRoles }" var="role">
                        	<option value="${role.id }">${role.name }</option>
                        </c:forEach>
                    </select>
已分配角色的遍历
<label for="exampleInputPassword1">已分配角色列表</label><br>
					<select id="rightList" name="assignRoleIds" class="form-control" multiple size="10" style="width:200px;overflow-y:auto;">
                        <c:forEach items="${assingedRoles }" var="role">
                        	<option value="${role.id }">${role.name }</option>
                        </c:forEach>
                    </select>

点击事件的实现

从左往右,实现分配角色
$("#left2RighBtn").click(function() {
				var opts= $("#leftList :selected");
				if(opts.length==0){
					layer.msg("请选择需要分配的角色!",{time:1000, icon:5, shift:6}, function() {
					});
				}else{
					$.ajax({
						type : "POST",
						url  : "${APP_PATH}/user/doAssign",
						data : $("#roleForm").serialize(),
						success : function(result) {
							if(result.success){
								$("#rightList").append(opts);
								layer.msg("角色分配成功!",{time:1000, icon:6}, function() {
								});
							}else{
								layer.msg("角色分配失败!",{time:1000, icon:5, shift:6}, function() {
								});
							}
						}
							
						});
						
					}
					
			});
从右往左,实现取消分配角色
$("#right2LeftBtn").click(function() {
				var opts= $("#rightList :selected");
				if(opts.length==0){
					layer.msg("请选择需要取消分配的角色!",{time:1000, icon:5, shift:6}, function() {
					});
				}else{
					$.ajax({
						type : "POST",
						url  : "${APP_PATH}/user/dounAssign",
						data : $("#roleForm").serialize(),
						success : function(result) {
							if(result.success){
								$("#leftList").append(opts);
								layer.msg("角色取消成功!",{time:1000, icon:6}, function() {
								});
							}else{
								layer.msg("角色取消失败!",{time:1000, icon:5, shift:6}, function() {
								});
							}
						}
							
					});
				}
});

controller

@ResponseBody
	@RequestMapping("doAssign")
	public Object doAssign(Integer userid,Integer[] unAssignRoleIds) {
		AJAXResult result=new AJAXResult();
		
		try {//增加关系
			Map<String, Object> map=new HashMap<String,Object>();
			map.put("userid", userid);
			map.put("roleids", unAssignRoleIds);
			userService.insertUserRoles(map);
			
			result.setSuccess(true);
		} catch (Exception e) {
			e.printStackTrace();
			result.setSuccess(false);
		}
		return result;
	}
	
	@ResponseBody
	@RequestMapping("dounAssign")
	public Object dounAssign(Integer userid,Integer[] assignRoleIds) {
		AJAXResult result=new AJAXResult();
		
		try {//取消关系
			Map<String, Object> map=new HashMap<String,Object>();
			map.put("userid", userid);
			map.put("roleids", assignRoleIds);
			userService.deleteUserRoles(map);
			
			result.setSuccess(true);
		} catch (Exception e) {
			e.printStackTrace();
			result.setSuccess(false);
		}
		return result;
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值