当前位置: 首页 > news >正文

手机app软件开发的价格/google seo怎么优化

手机app软件开发的价格,google seo怎么优化,宁波雪窦山名山建设委员会网站,wordpress教程破解版目录 前言 一、加入DWZ J-UI框架 二、实现登录页面 三、实现主页面菜单显示 前言 大家好!写文章之前先列出几篇相关文章。本文内容也在其项目中接续实现。 一. SSM项目集成Spring Security 4.X版本(使用spring-security.xml 配置文件方式&#xff…

目录

前言

一、加入DWZ J-UI框架

二、实现登录页面

三、实现主页面菜单显示


前言

大家好!写文章之前先列出几篇相关文章。本文内容也在其项目中接续实现。

一. SSM项目集成Spring Security 4.X版本(使用spring-security.xml 配置文件方式)_spring security4.x 会话管理配置文件版-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u011529483/article/details/135699004?spm=1001.2014.3001.5501

二. SpringSecurity认证登录成功后获取角色菜单-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u011529483/article/details/135763209?spm=1001.2014.3001.5501

三. Spring Security 4.X(XML文件配置session超时,单点登录-session并发控制,退出/logout)_spring security session过期时间 xml-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u011529483/article/details/136043238?spm=1001.2014.3001.5501


一、加入DWZ J-UI框架

1. 下载DWZ J-UI框架并解压

https://download.csdn.net/download/u011529483/87930662

以上为个人下载地址。

2. 在项目中新建dwz文件,如下图:

然后将解压后的 J-UI 框架的内容全部拷贝到 dwz 文件夹中。我解压后的效果如下:

具体可以参考文章:记dwz(JUI)前端框架使用(一)_dwz框架-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u011529483/article/details/129150062?spm=1001.2014.3001.5501

注意:此项目中由于加入了 spring-security ,所以需要对dwz文件夹进行配置,下图标红处:

好了!现在可以直接访问到 dwz 文件夹中的静态资源了。要复用dwz中的某一个页面只需要拷贝到指定位置修改成想要的模样就可以了。

二、实现登录页面

1. 将 dwz 文件夹中的 login.html 页面拷贝到 webapp 目录下,修改为jsp页面。如下图:

2. 修改 login.jsp 页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>wqxx系统登录页面</title><link href="./dwz/themes/css/login.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="login"><div id="login_header"><h1 class="login_logo"><a href="#"><img src="./dwz/themes/default/images/login_logo.gif" /></a></h1><div class="login_headerContent"><div class="navList"><ul><li><a href="#">设为首页</a></li><li><a href="#">反馈</a></li><li><a href="./dwz/doc/dwz-user-guide.pdf" target="_blank">帮助</a></li></ul></div><h2 class="login_title"><img src="./dwz/themes/default/images/login_title.png" /></h2></div></div><div id="login_content"><div class="loginForm"><form action="${pageContext.request.contextPath}/spring_security_check" method="post"><p><label>用户名:</label><input type="text" name="username" size="20" class="login_input" /></p><p><label>密码:</label><input type="password" name="password" size="20" class="login_input" /></p><p><label>验证码:</label><input class="code" type="text" size="5" /><span><img src="./dwz/themes/default/images/header_bg.png" alt="" width="75" height="24" /></span></p><div class="login_bar"><input class="sub" type="submit" value=" " /></div></form></div><div class="login_banner"><img src="./dwz/themes/default/images/login_banner.jpg" /></div><div class="login_main"><div class="login_inner"></div></div></div><div id="login_footer">Copyright &copy; 2009 www.dwzjs.com Inc. All Rights Reserved.</div>
</div></body>
</html>

主要注意 CSS, 图片等资源的路劲修改指向./dwz/目录中。

用户名,密码输入控件的修改与你的后台名称绑定。form表单提交请求的修改,因为使用了spring-security,所以提交路径为 spring-security.xml 文件中配置的路径

<form action="${pageContext.request.contextPath}/spring_security_check" method="post">

到此登录页面完成,如有页面显示差异,自己微调CSS等。运行项目效果如下:

另:附上 spring-security.xml 配置文件代码,登录的后台代码参考前言中的第一篇文章。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:security="http://www.springframework.org/schema/security"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security.xsd"><!--指定不受Spring Security管理--><security:http security="none" pattern="/login" /><!--放行DWZ的静态资源--><security:http security="none" pattern="/dwz/**" /><!--spring过滤器链配置1) 需要拦截什么资源2) 什么资源对应什么角色权限3) 定制认证方式: HttpBasic or FormLogin4) 自定义登录页面,定义登录请求地址,定义错误处理方式--><security:http><!--使用form-login的方式进行认证login-page:指定获取登录页面的url(需要编写controller返回登录页面)login-processing-url:指定登录页面中post请求提交到哪里的url(不需要编写controller,框架已实现)default-target-url:指定登录成功后,跳转到哪个url(需要编写controller)authentication-success-handler-ref:指定登录成功后,由哪个类来进行处理authentication-failure-handler-ref:指定登录失败后,由哪个类来进行处理username-parameter:指定登录表单中用户名的input中name值,如果这里不配置,则默认为usernamepassword-parameter:指定登录表单中密码的input中name值,如果这里不配置,则默认为password--><security:form-login login-page="/login" login-processing-url="/spring_security_check"authentication-success-handler-ref="myAuthenticationSuccessHandler"authentication-failure-handler-ref="myAuthenticationFailureHandler"/><!-- 关闭csrf的保护--><security:csrf disabled="true"/><!-- 配置资源拦截规则pattern属性指定资源目录: 即需要拦截的资源  /* 代表根目录下的一级目录  /** 代表根目录下的所有目录access(SpEL)方法执行Spring EL表达式。提供如下表达式:permitALL():设置那些路径可以直接访问,不需要认证。直接返回trueisAnonymous():只有匿名用户可以访问,登录用户不可访问isAuthenticated():需要身份认证成功才能访问。如果认证用户不是匿名用户,则返回true,认证通过isFullyAuthenticated():需要身份认证成功才能访问。如果认证用户不是匿名用户或记住我的用户,则返回true,认证通过其它自行查找......--><!--开始配置拦截规则,注意拦截规则的位置顺序(如不需要身份认证的规则,要放在前面,需要身份认证的规则放在后面)--><!--permitAll()不需要身份认证,无条件放行--><!--<security:intercept-url pattern="/login" access="permitAll()"/>--><!--<security:intercept-url pattern="/system/index" access="permitAll()"/>--><security:intercept-url pattern="/s_timeout.jsp" access="permitAll()"/><!--进行权限划分:hasRole('ROLE_USER'):表示拥有 ROLE_USER 权限的用户可以访问hasRole('ROLE_ALL'):表示拥有 ROLE_ALL 权限的用户可以访问。指定特定权限访问--><security:intercept-url pattern="/system/add" access="hasAuthority('admin')"/><security:intercept-url pattern="/system/list" access="hasAuthority('ROLE_ALL')"/><!--permitAll()不需要身份认证,无条件放行静态资源--><security:intercept-url pattern="/js/**" access="permitAll()"/><!--拦截所有页面,需要身份认证成功才能访问。如果认证用户不是匿名用户或记住我的用户,则返回true,认证通过--><security:intercept-url pattern="/**" access="isFullyAuthenticated()"/><!--结束配置拦截规则--><!-- 自定义用户访问权限不足的处理方式(需要编写controller返回权限不足的页面) --><security:access-denied-handler error-page="/accessDeny"/><!-- session管理,invalid-session-url:指定使用已经超时的sessionId(保存在Cookie中)进行请求需要重定向的页面或路径。max-sessions:默认值为1,session并发数量控制。控制同一用户在系统中同时允许存在的已经通过认证的session数量。当超过这个值时,Spring Security的默认策略是将先前的设为无效。如果要限制用户再次登录可以设置concurrency-control的error-if-maximum-exceeded的值为true。--><security:session-management invalid-session-url="/s_timeout.jsp"><security:concurrency-control max-sessions="1" error-if-maximum-exceeded="false"/></security:session-management><!--<security:session-management session-authentication-error-url="/session" invalid-session-url="/session"><security:concurrency-control max-sessions="1" session-registry-alias="sessionRegistry" error-if-maximum-exceeded="false" expired-url="/session"/></security:session-management>--><!--加上Remember Me功能,token-validity-seconds:有效时间(秒)--><!--<security:remember-me token-repository-ref="jdbcTokenRepository" token-validity-seconds="604800"/>--><!--<security:logout/>:注销功能logout-url="/logout":退出过滤器默认的拦截路径,springSecurity内LogoutFilter要拦截的url(向这/logout发送请求来注销)logout-success-url:用户退出后要被重定向的urlinvalidate-session:默认为true,用户在退出后Http session失效success-handler-ref:指定一个bean(需要实现LogoutSuccessHandler接口),用来自定义退出成功后的操作delete-cookies="JSESSIONID":删除session对应的cookie--><security:logout logout-url="/logout" logout-success-url="/login" invalidate-session="true" delete-cookies="JSESSIONID"/></security:http><!--身份验证管理器--><security:authentication-manager><!--自定义授权提供类MyUserDetailsService,获得登录用户的用户详情信息。此类实现UserDetailsService接口。user-service-ref="myUserDetailsService" : 指定 UserDetailsService 接口的实现类最终都要返回一个UserDetail,用户详情--><security:authentication-provider user-service-ref="myUserDetailsService"><!-- 配置:加密算法对用户输入的密码进行加密,然后和数据库的密码进行配对 --><!--<security:password-encoder ref="bCryptPasswordEncoder"/>--></security:authentication-provider></security:authentication-manager><!--创建 springSecurity 密码加密工具类,使用PasswordEncoder 接口的实现,也可以使用别的--><!--<bean id="bCryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>--><!--springSecurity实现 remember me 功能:如果用户登录选择 remember me ,springSecurity会将其cookie值存入数据库,来实现remember me 功能JdbcTokenRepositoryImpl 用来存取cookie值--><!--<bean id="jdbcTokenRepository" class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl"><property name="dataSource" ref="dataSource"/> &lt;!&ndash;数据库数据源&ndash;&gt;&lt;!&ndash;<property name="createTableOnStartup" value="true"/>&ndash;&gt; &lt;!&ndash;createTableOnStartup属性是当项目启动时,springSecurity创建表存储remember me相关信息,第二次启动时要注释这个属性&ndash;&gt;</bean>--></beans>

三、实现主页面菜单显示

1. 将 dwz 文件夹中的 index.html 页面拷贝到自定义项目目录 main 中,修改为 jsp页面,如下图:

2. 修改 index.jsp 页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>百炼成神管理系统</title><link href="../dwz/themes/default/style.css" rel="stylesheet" type="text/css" media="screen"/><link href="../dwz/themes/css/core.css" rel="stylesheet" type="text/css" media="screen"/><link href="../dwz/themes/css/print.css" rel="stylesheet" type="text/css" media="print"/><link href="../dwz/uploadify/css/uploadify.css" rel="stylesheet" type="text/css" media="screen"/><!--[if IE]><link href="../dwz/themes/css/ieHack.css" rel="stylesheet" type="text/css" media="screen"/><![endif]--><!--[if lt IE 9]><script src="../dwz/js/speedup.js" type="text/javascript"></script><script src="../dwz/js/jquery-1.12.4.js" type="text/javascript"></script><![endif]--><!--[if gte IE 9]><!--><script src="../dwz/js/jquery-3.4.1.js" type="text/javascript"></script><!--<![endif]--><script src="../dwz/js/jquery.cookie.js" type="text/javascript"></script><script src="../dwz/js/jquery.validate.js" type="text/javascript"></script><!--<script src="js/jquery.bgiframe.js" type="text/javascript"></script>--><script src="../dwz/xheditor/xheditor-1.2.2.min.js" type="text/javascript"></script><script src="../dwz/xheditor/xheditor_lang/zh-cn.js" type="text/javascript"></script><script src="../dwz/uploadify/scripts/jquery.uploadify.js" type="text/javascript"></script><script type="text/javascript" src="../dwz/chart/echarts.min.js"></script><script src="../dwz/js/dwz.core.js" type="text/javascript"></script><script src="../dwz/js/dwz.util.date.js" type="text/javascript"></script><script src="../dwz/js/dwz.validate.method.js" type="text/javascript"></script><script src="../dwz/js/dwz.barDrag.js" type="text/javascript"></script><script src="../dwz/js/dwz.drag.js" type="text/javascript"></script><script src="../dwz/js/dwz.tree.js" type="text/javascript"></script><script src="../dwz/js/dwz.accordion.js" type="text/javascript"></script><script src="../dwz/js/dwz.ui.js" type="text/javascript"></script><script src="../dwz/js/dwz.theme.js" type="text/javascript"></script><script src="../dwz/js/dwz.switchEnv.js" type="text/javascript"></script><script src="../dwz/js/dwz.alertMsg.js" type="text/javascript"></script><script src="../dwz/js/dwz.contextmenu.js" type="text/javascript"></script><script src="../dwz/js/dwz.navTab.js" type="text/javascript"></script><script src="../dwz/js/dwz.tab.js" type="text/javascript"></script><script src="../dwz/js/dwz.resize.js" type="text/javascript"></script><script src="../dwz/js/dwz.dialog.js" type="text/javascript"></script><script src="../dwz/js/dwz.dialogDrag.js" type="text/javascript"></script><script src="../dwz/js/dwz.sortDrag.js" type="text/javascript"></script><script src="../dwz/js/dwz.cssTable.js" type="text/javascript"></script><script src="../dwz/js/dwz.stable.js" type="text/javascript"></script><script src="../dwz/js/dwz.taskBar.js" type="text/javascript"></script><script src="../dwz/js/dwz.ajax.js" type="text/javascript"></script><script src="../dwz/js/dwz.pagination.js" type="text/javascript"></script><script src="../dwz/js/dwz.database.js" type="text/javascript"></script><script src="../dwz/js/dwz.selectedLoad.js" type="text/javascript"></script><script src="../dwz/js/dwz.datepicker.js" type="text/javascript"></script><script src="../dwz/js/dwz.effects.js" type="text/javascript"></script><script src="../dwz/js/dwz.panel.js" type="text/javascript"></script><script src="../dwz/js/dwz.checkbox.js" type="text/javascript"></script><script src="../dwz/js/dwz.history.js" type="text/javascript"></script><script src="../dwz/js/dwz.combox.js" type="text/javascript"></script><script src="../dwz/js/dwz.file.js" type="text/javascript"></script><script src="../dwz/js/dwz.print.js" type="text/javascript"></script><!-- 可以用dwz.min.js替换前面全部dwz.*.js (注意:替换时下面dwz.regional.zh.js还需要引入)<script src="bin/dwz.min.js" type="text/javascript"></script>--><script src="../dwz/js/dwz.regional.zh.js" type="text/javascript"></script><script type="text/javascript">$(function(){DWZ.init("../dwz/dwz.frag.xml", {loginUrl:"../dwz/login_dialog.html", loginTitle:"登录",	// 弹出登录对话框
//		loginUrl:"login.html",	// 跳到登录页面statusCode:{ok:200, error:300, timeout:301}, //【可选】pageInfo:{pageNum:"pageNum", numPerPage:"numPerPage", orderField:"orderField", orderDirection:"orderDirection"}, //【可选】keys: {statusCode:"statusCode", message:"message"}, //【可选】ui:{hideMode:'offsets'}, //【可选】hideMode:navTab组件切换的隐藏方式,支持的值有’display’,’offsets’负数偏移位置的值,默认值为’display’debug:false,	// 调试模式 【true|false】callback:function(){initEnv();$("#themeList").theme({themeBase:"themes"}); // themeBase 相对于index页面的主题base路径}});});</script></head><body>
<div id="layout"><div id="header"><div class="headerNav"><a class="logo" href="#">标志</a><ul class="nav"><li id="switchEnvBox"><a href="javascript:">(<span>北京</span>)切换城市</a><ul><li><a href="../dwz/sidebar_1.html">北京</a></li><li><a href="../dwz/sidebar_2.html">上海</a></li><li><a href="../dwz/sidebar_2.html">南京</a></li><li><a href="../dwz/sidebar_2.html">深圳</a></li><li><a href="../dwz/sidebar_2.html">广州</a></li><li><a href="../dwz/sidebar_2.html">天津</a></li><li><a href="../dwz/sidebar_2.html">杭州</a></li></ul></li><li><a href="../dwz/changepwd.html" target="dialog" rel="changepwd" width="600">设置</a></li><li><a href="<c:url value='/logout'/>">退出系统</a></li></ul><ul class="themeList" id="themeList"><li theme="default"><div class="selected">蓝色</div></li><li theme="green"><div>绿色</div></li><!--<li theme="red"><div>红色</div></li>--><li theme="purple"><div>紫色</div></li><li theme="silver"><div>银色</div></li><li theme="azure"><div>天蓝</div></li></ul></div><!-- navMenu --></div><div id="leftside"><div id="sidebar_s"><div class="collapse"><div class="toggleCollapse"><div></div></div></div></div><div id="sidebar"><div class="toggleCollapse"><h2>主菜单界面</h2><div>收缩</div></div><div class="accordion" fillSpace="sidebar"><div class="accordionHeader"><h2><span>Folder</span>导航列表</h2></div><div class="accordionContent"><ul class="tree treeFolder"><!-- 菜单开始 --><c:choose><c:when test="${listMenu.size()>0}"><c:forEach var="lstMenu" items="${listMenu}" varStatus="status"><c:if test="${lstMenu.parentId eq 10000}"><li><a href="${lstMenu.url}" target="navTab">${lstMenu.name}</a><c:forEach var="menuChild" items="${listMenu}"><c:if test="${menuChild.parentId eq lstMenu.id}"><ul><li><a href="${menuChild.url}" target="navTab" rel="page1" fresh="false">${menuChild.name}</a></li></ul></c:if></c:forEach></li></c:if></c:forEach></c:when><c:otherwise><p>没有查询到菜单列表!</p></c:otherwise></c:choose><!-- 菜单结束 --></ul></div></div></div></div><div id="container"><div id="navTab" class="tabsPage"><div class="tabsPageHeader"><div class="tabsPageHeaderContent"><!-- 显示左右控制时添加 class="tabsPageHeaderMargin" --><ul class="navTab-tab"><li tabid="main" class="main"><a href="javascript:;"><span><span class="home_icon">我的主页</span></span></a></li></ul></div><div class="tabsLeft">left</div><!-- 禁用只需要添加一个样式 class="tabsLeft tabsLeftDisabled" --><div class="tabsRight">right</div><!-- 禁用只需要添加一个样式 class="tabsRight tabsRightDisabled" --><div class="tabsMore">more</div></div><ul class="tabsMoreList"><li><a href="javascript:;">我的主页</a></li></ul><div class="navTab-panel tabsPageContent layoutBox"><div class="page unitBox"><div class="pageFormContent" layoutH="80" style="margin-right:230px"></div><%--                    <div style="width:230px;position: absolute;top:60px;right:0" layoutH="80"><iframe width="100%" height="430" class="share_self" frameborder="0" scrolling="no" src="//widget.weibo.com/weiboshow/index.php?width=0&height=430&fansRow=2&ptype=1&skin=1&isTitle=0&noborder=1&isWeibo=1&isFans=0&uid=1739071261&verifier=c683dfe7"></iframe></div>--%></div></div></div></div></div><div id="footer">Copyright &copy; 2020 <a href="demo_page2.html" target="dialog">DWZ团队</a> 京ICP备15053290号-2</div></body>
</html>

主要引入JSP页面需要的标签库,修改所有dwz静态资源的访问路径。其它用不到的代码直接删除掉即可,如下图:

到此基本的主页修改完成,现在我们来动态显示后台请求到的菜单。将index.jsp页面的菜单部分多余代码删除,然后替换为下图代码:

动态菜单必须通过后台请求查询得到,所以此时我们修改spring-security.xml文件中登录成功后的处理类MyAuthenticationSuccessHandler 的逻辑,即保存登录用户信息后重定向到Controller的./system/index请求,代码如下:

另:注释掉spring-security.xml文件中/system/index请求路径的放行配置,即需要身份认证成功才能访问。

package com.wqbr.wqdemotwo.service.impl;import com.fasterxml.jackson.databind.ObjectMapper;
import com.wqbr.wqdemotwo.domain.SysUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Service;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** 登录成功后的处理类* @author lv* @date 2024年1月16日*/
@Service
public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler {// new 一个 jackson 的 对象private ObjectMapper objectMapper = new ObjectMapper();/*** 此方法会在登录成功后进行回调** @param authentication:表示认证成功后的信息*/@Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {System.out.println("********* onAuthenticationSuccess");HttpSession session = request.getSession();System.out.println("session对象:"+session);System.out.println("----session.getId():"+session.getId());System.out.println("*****session.isNew():"+session.isNew());try {SysUser user = (SysUser) authentication.getPrincipal();session.setAttribute("loginInfo", user);response.sendRedirect("./system/index"); //重定向到Controller中指定的路径} catch (Exception e) {e.printStackTrace();}}
}

​​​​​​​SystemController类中的index方法代码修改如下(即./system/index请求的方法):

    @RequestMapping(path = "/index")public ModelAndView index(Authentication authentication, HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();System.out.println("session对象:" + session);System.out.println("----session.getId():" + session.getId());System.out.println("*****session.isNew():" + session.isNew());System.out.println("index 页面进入......");ModelAndView model = new ModelAndView("main/index");SysUser user = (SysUser) authentication.getPrincipal();String username = user.getUsername();if (username != null) {List<Menus> listMenu = new ArrayList<>();List<SysPermission> pList = systemService.findPermissionByUsername(username);System.out.println("=-----=大小为:" + pList.size());for (SysPermission permission : pList) {if (permission.getResource_type().equals("menu")) {Menus menu = new Menus();menu.setId(Long.parseLong(permission.getId()));menu.setName(permission.getName());menu.setParentId(Long.parseLong(permission.getParent_id()));menu.setParentIds(Long.parseLong(permission.getParent_ids()));menu.setUrl(permission.getUrl());listMenu.add(menu);}}model.addObject("listMenu", listMenu);}return model;}

spring-security认证登录成功后获取菜单资源的实现可具体参考前言提到的第二篇文章。

到此已经可以实现登录后获取主页左边的动态菜单显示了,运行项目登录后显示效果如下:

好了,此文章的码字就到此结束了,再见

相关文章:

SSM项目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架实现登录和主页菜单显示

目录 前言 一、加入DWZ J-UI框架 二、实现登录页面 三、实现主页面菜单显示 前言 大家好&#xff01;写文章之前先列出几篇相关文章。本文内容也在其项目中接续实现。 一. SSM项目集成Spring Security 4.X版本&#xff08;使用spring-security.xml 配置文件方式&#xff…...

【MySQL】如何理解MySQL的锁(图文并茂,一网打尽)

一、锁的介绍 锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题&#xff0c;锁的冲突也是影响数据库并发访问性能的一个重要因素&#xff0c;所以数据库中锁的应用极为重要&#xff0c;其复杂度也更…...

【设计模式】01-装饰器模式Decorator

作用&#xff1a;在不修改对象外观和功能的情况下添加或者删除对象功能&#xff0c;即给一个对象动态附加职能 装饰器模式主要包含以下角色。 抽象构件&#xff08;Component&#xff09;角色&#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08…...

【Python笔记-设计模式】原型模式

一、说明 原型模式是一种创建型设计模式&#xff0c; 用于创建重复的对象&#xff0c;同时又能保证性能。 使一个原型实例指定了要创建的对象的种类&#xff0c;并且通过拷贝这个原型来创建新的对象。 (一) 解决问题 主要解决了对象的创建与复制过程中的性能问题。主要针对…...

启动node服务报错Error: listen EACCES: permission denied 0.0.0.0:5000

启动node服务报错&#xff1a; 解决方案&#xff1a; 将监听端口改成3000或者其他 修改后结果&#xff1a; 参考原文&#xff1a; Error: listen EACCES: permission denied_error when starting dev server: error: listen eacc-CSDN博客...

onlyoffice api开发

编写代码 按照https://api.onlyoffice.com/editors/basic编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scal…...

设计模式-工厂方法模式(C++)

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程&#xff0c;使得系统更加灵活和可扩展。 下面是一个使用 C…...

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1&#xff1a;使用PlaneGeometry创建平面缓存几何体案例2&#xff1a;使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1&#xff1a;不设置顶点法向量…...

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…...

简单mock server模拟用户请求给小程序提供数据

整理小程序代码时发现一此小程序离开了mock-server基本上没有办法显示了,因此用node,express来满足给小程序提供演示数据的功能 const express require(express); const { createCanvas, Image } require(canvas); const fs require(fs); const path require(path);…...

【MATLAB】 EWT信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 EWT分解算法 EWT分解算法是一种基于小波变换的信号分解算法&#xff0c;它可以将信号分解为一系列具有不同频率特性的小波分量。该算法的基本思想是将信号分解为多个不同尺度的小波分量&#xff0c;并对…...

MATLAB中,如何捕获和处理异常?如何在MATLAB中自定义错误消息?在MATLAB中,error函数和warning函数有什么区别?

MATLAB中&#xff0c;如何捕获和处理异常&#xff1f; 在MATLAB中&#xff0c;捕获和处理异常通常使用try-catch语句。try块包含可能引发异常的代码&#xff0c;而catch块则包含当异常发生时执行的代码。以下是如何在MATLAB中捕获和处理异常的基本步骤&#xff1a; 使用try关键…...

【算法与数据结构】127、LeetCode单词接龙

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;示例1为例&#xff0c;hit到达cog的路线不止一条&#xff0c;如何找到最短是关键。广度优先搜索是一圈…...

CAN——创建一个数据库DBC文件

一、创建一个工程 file——new——can 500kbaud1ch 得到一个工程文件.cfg 二、实现两个节点通讯 can networks 三、创建数据库DBC tool——candbeditor——file——creatdatabase——cantemplate.dbc 1.建数值表 view——value tables——空白处右击add—— definition 定…...

(十三)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…...

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录 关系型数据库三范式介绍 一、什么是三范式 二、数据冗余 三、范式的划分 四、一范式 五、二范式 六、三范式 七、总结 关系型数据库三范式介绍 一、什么是三范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&…...

掌控互联网脉络:深入解析边界网关协议(BGP)的力量与挑战

BGP简介 边界网关协议&#xff08;Border Gateway Protocol&#xff0c;BGP&#xff09;是互联网上最重要的路由协议之一&#xff0c;负责在不同自治系统&#xff08;AS&#xff09;之间传播路由信息。BGP使得互联网中的不同网络可以互相通信&#xff0c;支持互联网的规模化扩…...

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…...

【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码

提取图中苹果的面积、周长和最小外接矩形 在图像处理中&#xff0c;提取对象的关键属性是常见的任务之一。本文将演示如何使用三种流行的编程语言——Python、Matlab和C&#xff0c;利用相应的图像处理库&#xff08;OpenCV或Matlab内置函数&#xff09;来提取图像中苹果的面积…...

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…...

在项目中使用CancelToken选择性取消Axios请求

Axios 提供了 CancelToken 类来创建取消标记。取消标记实际上是一个包含 token 标记和 cancel 方法的对象。 1、基本使用方法 const CancelToken axios.CancelToken; const source CancelToken.source();axios.get(/user/12345, {cancelToken: source.token }).catch(functi…...

[c++] 记录一次引用使用不当导致的 bug

在工作中看到了如下代码&#xff0c;代码基于 std::thread 封装了一个 Thread 类。Thread 封装了业务开发中常用的接口&#xff0c;比如设置调度策略&#xff0c;设置优先级&#xff0c;设置线程名。如下代码删去了不必要的代码&#xff0c;只保留能说明问题的代码。从代码实现…...

能不能节约百分之九十的算力来训练模型

Sora是由OpenAI开发的视频生成模型&#xff0c;它采用了多种先进的技术和架构&#xff0c;能够根据文本描述生成长达一分钟的高清视频。虽然OpenAI并未公开Sora的详细模型架构和实现细节&#xff0c;但我们可以根据公开的信息和参考论文来了解其技术架构。 Sora的核心技术架构主…...

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅&#xff0c;我们想要把它改成∅←1←2←3。在遍历链表时&#xff0c;将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…...

高级统计方法 第1次作业

概念 1. 请解释什么是P值&#xff0c;怎么计算p值&#xff0c;p值结果怎么理解&#xff0c;p值有哪些应用......&#xff1f; &#xff08;a&#xff09;什么是P值 P值是一种用来判定假设检验结果的一个参数&#xff0c;它描述了在原假设为真的情况下&#xff0c;比所得到的…...

spinalhdl,vivado,fpga

https://spinalhdl.github.io/SpinalDoc-RTD/master spinal hdl sudo apt install openjdk-17-jdk scala curl echo “deb https://repo.scala-sbt.org/scalasbt/debian all main” | sudo tee /etc/apt/sources.list.d/sbt.list echo “deb https://repo.scala-sbt.org/scal…...

Tomcat线程池原理(下篇:工作原理)

文章目录 前言正文一、执行线程的基本流程1.1 JUC中的线程池执行线程1.2 Tomcat 中线程池执行线程 二、被改造的阻塞队列2.1 TaskQueue的 offer(...)2.2 TaskQueue的 force(...) 三、总结 前言 Tomcat 线程池&#xff0c;是依据 JUC 中的线程池 ThreadPoolExecutor 重新自定义…...

【服务器数据恢复】通过reed-solomon算法恢复raid6数据的案例

服务器数据恢复环境&#xff1a; 一台网站服务器中有一组由6块磁盘组建的RAID6磁盘阵列&#xff0c;操作系统层面运行MySQL数据库和存放一些其他类型文件。 服务器故障&#xff1a; 该服务器在工作过程中&#xff0c;raid6磁盘阵列中有两块磁盘先后离线&#xff0c;不知道是管理…...

LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序

【LetMeFly】2583.二叉树中的第 K 大层和&#xff1a;层序遍历 排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/kth-largest-sum-in-a-binary-tree/ 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k …...

element ui 安装 简易过程 已解决

我之所以将Element归类为Vue.js&#xff0c;其主要原因是Element是&#xff08;饿了么团队&#xff09;基于MVVM框架Vue开源出来的一套前端ui组件。我最爱的就是它的布局容器&#xff01;&#xff01;&#xff01; 下面进入正题&#xff1a; 1、Element的安装 首先你需要创建…...