From a9c86940e251ae307e48f0ab243bfa3a8ef0b39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Tue, 11 Dec 2018 22:36:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0debug=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/export/js/mgResizeble.js | 210 +- .../webjars/doc-db/js/mgResizeble.js | 210 +- .../config/security/WebSecurityConfig.java | 274 +-- .../webapp/statics/lib/mg/js/mgResizeble.js | 210 +- .../controller/MgStorageController.java | 130 +- .../src/main/resources/document.html | 21 +- .../src/main/resources/export/css/mg-ui.css | 268 +-- .../src/main/resources/export/document.html | 408 ++-- .../src/main/resources/export/js/mg-ui.js | 1416 +++++------ .../main/resources/export/js/mgResizeble.js | 210 +- .../resources/webjars/mg-ui/css/mg-ui.css | 272 ++- .../main/resources/webjars/mg-ui/js/common.js | 48 +- .../webjars/mg-ui/js/mg-ui-cache-keys.js | 1 + .../main/resources/webjars/mg-ui/js/mg-ui.js | 2137 ++++++++--------- .../resources/webjars/mg-ui/js/mgResizable.js | 210 +- .../webjars/zpages/debugDataConfig.html | 131 +- 16 files changed, 3118 insertions(+), 3038 deletions(-) diff --git a/zyplayer-doc-db/src/main/resources/export/js/mgResizeble.js b/zyplayer-doc-db/src/main/resources/export/js/mgResizeble.js index c927aa9e..366e87f6 100644 --- a/zyplayer-doc-db/src/main/resources/export/js/mgResizeble.js +++ b/zyplayer-doc-db/src/main/resources/export/js/mgResizeble.js @@ -1,106 +1,106 @@ - -/** - * 两个元素上下、左右拖动动态改变大小 - * @author 暮光:城中城 - * @since 2017年5月7日 - */ -(function($){ - $.fn.mgResizebleHeight = function(options) { - var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; - var opts = $.extend(defaults, options); - var disY = 0, prevH = 0, nextH = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var H = ev.clientY - disY; - var prevHNow = prevH+H, nextHNow = nextH-H; - if(opts.prevHtMin >= prevHNow) { - prevHNow = opts.prevHtMin; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMin >= nextHNow) { - nextHNow = opts.nextHtMin; - prevHNow = prev.outerHeight(); - } - if(opts.prevHtMax <= prevHNow) { - prevHNow = opts.prevHtMax; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMax <= nextHNow) { - nextHNow = opts.nextHtMax; - prevHNow = prev.outerHeight(); - } - //prev.css("height", prevHNow + 'px'); - //next.css("height", nextHNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevHNow, nextHNow); - } - }).mouseup(function(ev){ - isStart = false; - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disY = ev.clientY; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevH = prev.outerHeight(); - nextH = next.outerHeight(); - isStart = true; - }); - } - /** - * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 - */ - $.fn.mgResizebleWidth = function(options) { - var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; - var opts = $.extend(defaults, options); - var disX = 0, prevW = 0, nextW = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var W = ev.clientX - disX; - var prevWNow = prevW+W, nextWNow = nextW-W; - if(opts.prevWtMin >= prevWNow) { - prevWNow = opts.prevWtMin; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMin >= nextWNow) { - nextWNow = opts.nextWtMin; - prevWNow = prev.outerWidth(); - } - if(opts.prevWtMax <= prevWNow) { - prevWNow = opts.prevWtMax; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMax <= nextWNow) { - nextWNow = opts.nextWtMax; - prevWNow = prev.outerWidth(); - } - //prev.css("width", prevWNow + 'px'); - //next.css("width", nextWNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevWNow, nextWNow); - } - }).mouseup(function(ev){ - if(!isStart){return;} - isStart = false; - if(typeof opts.onfinish == 'function') { - opts.onfinish(); - } - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disX = ev.clientX; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevW = prev.outerWidth(); - nextW = next.outerWidth(); - isStart = true; - if(typeof opts.onstart == 'function') { - opts.onstart(); - } - }); - } + +/** + * 两个元素上下、左右拖动动态改变大小 + * @author 暮光:城中城 + * @since 2017年5月7日 + */ +(function($){ + $.fn.mgResizableHeight = function(options) { + var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; + var opts = $.extend(defaults, options); + var disY = 0, prevH = 0, nextH = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var H = ev.clientY - disY; + var prevHNow = prevH+H, nextHNow = nextH-H; + if(opts.prevHtMin >= prevHNow) { + prevHNow = opts.prevHtMin; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMin >= nextHNow) { + nextHNow = opts.nextHtMin; + prevHNow = prev.outerHeight(); + } + if(opts.prevHtMax <= prevHNow) { + prevHNow = opts.prevHtMax; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMax <= nextHNow) { + nextHNow = opts.nextHtMax; + prevHNow = prev.outerHeight(); + } + //prev.css("height", prevHNow + 'px'); + //next.css("height", nextHNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevHNow, nextHNow); + } + }).mouseup(function(ev){ + isStart = false; + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disY = ev.clientY; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevH = prev.outerHeight(); + nextH = next.outerHeight(); + isStart = true; + }); + } + /** + * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 + */ + $.fn.mgResizableWidth = function(options) { + var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; + var opts = $.extend(defaults, options); + var disX = 0, prevW = 0, nextW = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var W = ev.clientX - disX; + var prevWNow = prevW+W, nextWNow = nextW-W; + if(opts.prevWtMin >= prevWNow) { + prevWNow = opts.prevWtMin; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMin >= nextWNow) { + nextWNow = opts.nextWtMin; + prevWNow = prev.outerWidth(); + } + if(opts.prevWtMax <= prevWNow) { + prevWNow = opts.prevWtMax; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMax <= nextWNow) { + nextWNow = opts.nextWtMax; + prevWNow = prev.outerWidth(); + } + //prev.css("width", prevWNow + 'px'); + //next.css("width", nextWNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevWNow, nextWNow); + } + }).mouseup(function(ev){ + if(!isStart){return;} + isStart = false; + if(typeof opts.onfinish == 'function') { + opts.onfinish(); + } + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disX = ev.clientX; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevW = prev.outerWidth(); + nextW = next.outerWidth(); + isStart = true; + if(typeof opts.onstart == 'function') { + opts.onstart(); + } + }); + } })(jQuery); \ No newline at end of file diff --git a/zyplayer-doc-db/src/main/resources/webjars/doc-db/js/mgResizeble.js b/zyplayer-doc-db/src/main/resources/webjars/doc-db/js/mgResizeble.js index c927aa9e..366e87f6 100644 --- a/zyplayer-doc-db/src/main/resources/webjars/doc-db/js/mgResizeble.js +++ b/zyplayer-doc-db/src/main/resources/webjars/doc-db/js/mgResizeble.js @@ -1,106 +1,106 @@ - -/** - * 两个元素上下、左右拖动动态改变大小 - * @author 暮光:城中城 - * @since 2017年5月7日 - */ -(function($){ - $.fn.mgResizebleHeight = function(options) { - var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; - var opts = $.extend(defaults, options); - var disY = 0, prevH = 0, nextH = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var H = ev.clientY - disY; - var prevHNow = prevH+H, nextHNow = nextH-H; - if(opts.prevHtMin >= prevHNow) { - prevHNow = opts.prevHtMin; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMin >= nextHNow) { - nextHNow = opts.nextHtMin; - prevHNow = prev.outerHeight(); - } - if(opts.prevHtMax <= prevHNow) { - prevHNow = opts.prevHtMax; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMax <= nextHNow) { - nextHNow = opts.nextHtMax; - prevHNow = prev.outerHeight(); - } - //prev.css("height", prevHNow + 'px'); - //next.css("height", nextHNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevHNow, nextHNow); - } - }).mouseup(function(ev){ - isStart = false; - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disY = ev.clientY; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevH = prev.outerHeight(); - nextH = next.outerHeight(); - isStart = true; - }); - } - /** - * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 - */ - $.fn.mgResizebleWidth = function(options) { - var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; - var opts = $.extend(defaults, options); - var disX = 0, prevW = 0, nextW = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var W = ev.clientX - disX; - var prevWNow = prevW+W, nextWNow = nextW-W; - if(opts.prevWtMin >= prevWNow) { - prevWNow = opts.prevWtMin; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMin >= nextWNow) { - nextWNow = opts.nextWtMin; - prevWNow = prev.outerWidth(); - } - if(opts.prevWtMax <= prevWNow) { - prevWNow = opts.prevWtMax; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMax <= nextWNow) { - nextWNow = opts.nextWtMax; - prevWNow = prev.outerWidth(); - } - //prev.css("width", prevWNow + 'px'); - //next.css("width", nextWNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevWNow, nextWNow); - } - }).mouseup(function(ev){ - if(!isStart){return;} - isStart = false; - if(typeof opts.onfinish == 'function') { - opts.onfinish(); - } - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disX = ev.clientX; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevW = prev.outerWidth(); - nextW = next.outerWidth(); - isStart = true; - if(typeof opts.onstart == 'function') { - opts.onstart(); - } - }); - } + +/** + * 两个元素上下、左右拖动动态改变大小 + * @author 暮光:城中城 + * @since 2017年5月7日 + */ +(function($){ + $.fn.mgResizableHeight = function(options) { + var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; + var opts = $.extend(defaults, options); + var disY = 0, prevH = 0, nextH = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var H = ev.clientY - disY; + var prevHNow = prevH+H, nextHNow = nextH-H; + if(opts.prevHtMin >= prevHNow) { + prevHNow = opts.prevHtMin; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMin >= nextHNow) { + nextHNow = opts.nextHtMin; + prevHNow = prev.outerHeight(); + } + if(opts.prevHtMax <= prevHNow) { + prevHNow = opts.prevHtMax; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMax <= nextHNow) { + nextHNow = opts.nextHtMax; + prevHNow = prev.outerHeight(); + } + //prev.css("height", prevHNow + 'px'); + //next.css("height", nextHNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevHNow, nextHNow); + } + }).mouseup(function(ev){ + isStart = false; + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disY = ev.clientY; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevH = prev.outerHeight(); + nextH = next.outerHeight(); + isStart = true; + }); + } + /** + * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 + */ + $.fn.mgResizableWidth = function(options) { + var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; + var opts = $.extend(defaults, options); + var disX = 0, prevW = 0, nextW = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var W = ev.clientX - disX; + var prevWNow = prevW+W, nextWNow = nextW-W; + if(opts.prevWtMin >= prevWNow) { + prevWNow = opts.prevWtMin; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMin >= nextWNow) { + nextWNow = opts.nextWtMin; + prevWNow = prev.outerWidth(); + } + if(opts.prevWtMax <= prevWNow) { + prevWNow = opts.prevWtMax; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMax <= nextWNow) { + nextWNow = opts.nextWtMax; + prevWNow = prev.outerWidth(); + } + //prev.css("width", prevWNow + 'px'); + //next.css("width", nextWNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevWNow, nextWNow); + } + }).mouseup(function(ev){ + if(!isStart){return;} + isStart = false; + if(typeof opts.onfinish == 'function') { + opts.onfinish(); + } + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disX = ev.clientX; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevW = prev.outerWidth(); + nextW = next.outerWidth(); + isStart = true; + if(typeof opts.onstart == 'function') { + opts.onstart(); + } + }); + } })(jQuery); \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java index c67e47d9..76803226 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java @@ -1,138 +1,138 @@ -package com.zyplayer.doc.manage.framework.config.security; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.RememberMeAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.AuthenticationFailureHandler; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; -import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter; -import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices; -import org.springframework.util.DigestUtils; - -@Order(1) -@Configuration -@EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - - @Bean - @Override - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } - - /** - * 忽略静态文件 - */ - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/statics/lib/**", "/css/**", "/js/**", "/img/**", "/swagger-resources", "/v2/api-docs"); - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - String loginPage = "/statics/manage/login.html"; - - http.authorizeRequests().antMatchers("/login/**", "/document.html").permitAll()//为了测试其他功能,设置“ /** ”允许所有请求 - .antMatchers("/document.html").hasAuthority("DOC_ALL") - // 其他地址的访问均需登录 - .anyRequest().authenticated().and() - // 添加验证码验证 - .addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) - .exceptionHandling() - .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginPage)) - .and().addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class) - // 指定登录页面的请求路径 - .formLogin().loginPage(loginPage) - // 登陆处理路径 - .loginProcessingUrl("/login").permitAll() - // 退出请求的默认路径为logout - .and().logout().deleteCookies("remember-me") - .logoutUrl("/logout").logoutSuccessUrl(loginPage) - .permitAll() - // 开启rememberMe,设置一个私钥专供testall项目使用,注意与下面TokenBasedRememberMeServices的key保持一致 - // .rememberMe().key("testallKey").and() - // 关闭csrf - .and().csrf().disable() - // X-Frame-Options: SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示 - .headers().frameOptions().sameOrigin(); - } - - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.userDetailsService(userDetailsServiceImpl()) - .passwordEncoder(new PasswordEncoder() { - @Override - public String encode(CharSequence charSequence) { - return DigestUtils.md5DigestAsHex(charSequence.toString().getBytes()); - } - @Override - public boolean matches(CharSequence charSequence, String s) { - String digestAsHex = DigestUtils.md5DigestAsHex(charSequence.toString().getBytes()); - return s.equals(digestAsHex); - } - }).and().authenticationProvider(rememberMeAuthenticationProvider()); - } - - @Bean - public DocDetailsServiceImpl userDetailsServiceImpl() { - return new DocDetailsServiceImpl(); - } - - @Bean - public DocUsernamePasswordAuthenticationFilter myUsernamePasswordAuthenticationFilter() throws Exception { - DocUsernamePasswordAuthenticationFilter myFilter = new DocUsernamePasswordAuthenticationFilter(); - myFilter.setAuthenticationManager(authenticationManagerBean()); - myFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler()); - myFilter.setAuthenticationFailureHandler(authenticationFailureHandler()); - myFilter.setRememberMeServices(tokenBasedRememberMeServices()); - return myFilter; - } - - @Bean - public AuthenticationSuccessHandler authenticationSuccessHandler() { - return new SimpleUrlAuthenticationSuccessHandler("/login/success"); - } - - @Bean - public AuthenticationFailureHandler authenticationFailureHandler() { - return new SimpleUrlAuthenticationFailureHandler("/login/failure"); - } - - @Bean - public TokenBasedRememberMeServices tokenBasedRememberMeServices() { - TokenBasedRememberMeServices tbrms = new TokenBasedRememberMeServices("testallKey", userDetailsServiceImpl()); - // 设置cookie过期时间为2天 - tbrms.setTokenValiditySeconds(60 * 60 * 24 * 2); - // 设置checkbox的参数名为rememberMe(默认为remember-me),注意如果是ajax请求,参数名不是checkbox的name而是在ajax的data里 - tbrms.setParameter("rememberMe"); - tbrms.setAlwaysRemember(false); - return tbrms; - } - - @Bean - public RememberMeAuthenticationProvider rememberMeAuthenticationProvider() { - RememberMeAuthenticationProvider rmap = new RememberMeAuthenticationProvider("testallKey"); - return rmap; - } - - @Bean - public RememberMeAuthenticationFilter rememberMeAuthenticationFilter() throws Exception { - RememberMeAuthenticationFilter myFilter = new RememberMeAuthenticationFilter(authenticationManagerBean(), tokenBasedRememberMeServices()); - return myFilter; - } - +package com.zyplayer.doc.manage.framework.config.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.RememberMeAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter; +import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices; +import org.springframework.util.DigestUtils; + +@Order(1) +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + /** + * 忽略静态文件 + */ + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring().antMatchers("/statics/lib/**", "/css/**", "/js/**", "/img/**", "/swagger-resources", "/v2/api-docs"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + String loginPage = "/statics/manage/login.html"; + + http.authorizeRequests().antMatchers("/login/**").permitAll()//为了测试其他功能,设置“ /** ”允许所有请求 + .antMatchers("/document.html").hasAuthority("DOC_ALL") + // 其他地址的访问均需登录 + .anyRequest().authenticated().and() + // 添加验证码验证 + .addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) + .exceptionHandling() + .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginPage)) + .and().addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class) + // 指定登录页面的请求路径 + .formLogin().loginPage(loginPage) + // 登陆处理路径 + .loginProcessingUrl("/login").permitAll() + // 退出请求的默认路径为logout + .and().logout().deleteCookies("remember-me") + .logoutUrl("/logout").logoutSuccessUrl(loginPage) + .permitAll() + // 开启rememberMe,设置一个私钥专供testall项目使用,注意与下面TokenBasedRememberMeServices的key保持一致 + // .rememberMe().key("testallKey").and() + // 关闭csrf + .and().csrf().disable() + // X-Frame-Options: SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示 + .headers().frameOptions().sameOrigin(); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsServiceImpl()) + .passwordEncoder(new PasswordEncoder() { + @Override + public String encode(CharSequence charSequence) { + return DigestUtils.md5DigestAsHex(charSequence.toString().getBytes()); + } + @Override + public boolean matches(CharSequence charSequence, String s) { + String digestAsHex = DigestUtils.md5DigestAsHex(charSequence.toString().getBytes()); + return s.equals(digestAsHex); + } + }).and().authenticationProvider(rememberMeAuthenticationProvider()); + } + + @Bean + public DocDetailsServiceImpl userDetailsServiceImpl() { + return new DocDetailsServiceImpl(); + } + + @Bean + public DocUsernamePasswordAuthenticationFilter myUsernamePasswordAuthenticationFilter() throws Exception { + DocUsernamePasswordAuthenticationFilter myFilter = new DocUsernamePasswordAuthenticationFilter(); + myFilter.setAuthenticationManager(authenticationManagerBean()); + myFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler()); + myFilter.setAuthenticationFailureHandler(authenticationFailureHandler()); + myFilter.setRememberMeServices(tokenBasedRememberMeServices()); + return myFilter; + } + + @Bean + public AuthenticationSuccessHandler authenticationSuccessHandler() { + return new SimpleUrlAuthenticationSuccessHandler("/login/success"); + } + + @Bean + public AuthenticationFailureHandler authenticationFailureHandler() { + return new SimpleUrlAuthenticationFailureHandler("/login/failure"); + } + + @Bean + public TokenBasedRememberMeServices tokenBasedRememberMeServices() { + TokenBasedRememberMeServices tbrms = new TokenBasedRememberMeServices("testallKey", userDetailsServiceImpl()); + // 设置cookie过期时间为2天 + tbrms.setTokenValiditySeconds(60 * 60 * 24 * 2); + // 设置checkbox的参数名为rememberMe(默认为remember-me),注意如果是ajax请求,参数名不是checkbox的name而是在ajax的data里 + tbrms.setParameter("rememberMe"); + tbrms.setAlwaysRemember(false); + return tbrms; + } + + @Bean + public RememberMeAuthenticationProvider rememberMeAuthenticationProvider() { + RememberMeAuthenticationProvider rmap = new RememberMeAuthenticationProvider("testallKey"); + return rmap; + } + + @Bean + public RememberMeAuthenticationFilter rememberMeAuthenticationFilter() throws Exception { + RememberMeAuthenticationFilter myFilter = new RememberMeAuthenticationFilter(authenticationManagerBean(), tokenBasedRememberMeServices()); + return myFilter; + } + } \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/mgResizeble.js b/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/mgResizeble.js index c927aa9e..366e87f6 100644 --- a/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/mgResizeble.js +++ b/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/mgResizeble.js @@ -1,106 +1,106 @@ - -/** - * 两个元素上下、左右拖动动态改变大小 - * @author 暮光:城中城 - * @since 2017年5月7日 - */ -(function($){ - $.fn.mgResizebleHeight = function(options) { - var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; - var opts = $.extend(defaults, options); - var disY = 0, prevH = 0, nextH = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var H = ev.clientY - disY; - var prevHNow = prevH+H, nextHNow = nextH-H; - if(opts.prevHtMin >= prevHNow) { - prevHNow = opts.prevHtMin; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMin >= nextHNow) { - nextHNow = opts.nextHtMin; - prevHNow = prev.outerHeight(); - } - if(opts.prevHtMax <= prevHNow) { - prevHNow = opts.prevHtMax; - nextHNow = next.outerHeight(); - } - if(opts.nextHtMax <= nextHNow) { - nextHNow = opts.nextHtMax; - prevHNow = prev.outerHeight(); - } - //prev.css("height", prevHNow + 'px'); - //next.css("height", nextHNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevHNow, nextHNow); - } - }).mouseup(function(ev){ - isStart = false; - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disY = ev.clientY; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevH = prev.outerHeight(); - nextH = next.outerHeight(); - isStart = true; - }); - } - /** - * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 - */ - $.fn.mgResizebleWidth = function(options) { - var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; - var opts = $.extend(defaults, options); - var disX = 0, prevW = 0, nextW = 0, isStart = false; - var prev, next, thisObj = this; - $(document).mousemove(function(ev){ - if(!isStart){return;} - var ev = ev || window.event; - var W = ev.clientX - disX; - var prevWNow = prevW+W, nextWNow = nextW-W; - if(opts.prevWtMin >= prevWNow) { - prevWNow = opts.prevWtMin; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMin >= nextWNow) { - nextWNow = opts.nextWtMin; - prevWNow = prev.outerWidth(); - } - if(opts.prevWtMax <= prevWNow) { - prevWNow = opts.prevWtMax; - nextWNow = next.outerWidth(); - } - if(opts.nextWtMax <= nextWNow) { - nextWNow = opts.nextWtMax; - prevWNow = prev.outerWidth(); - } - //prev.css("width", prevWNow + 'px'); - //next.css("width", nextWNow + 'px'); - if(typeof opts.onresize == 'function') { - opts.onresize(prevWNow, nextWNow); - } - }).mouseup(function(ev){ - if(!isStart){return;} - isStart = false; - if(typeof opts.onfinish == 'function') { - opts.onfinish(); - } - }); - $(this).mousedown(function(ev){ - var ev = ev || window.event; - disX = ev.clientX; - prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); - next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); - prevW = prev.outerWidth(); - nextW = next.outerWidth(); - isStart = true; - if(typeof opts.onstart == 'function') { - opts.onstart(); - } - }); - } + +/** + * 两个元素上下、左右拖动动态改变大小 + * @author 暮光:城中城 + * @since 2017年5月7日 + */ +(function($){ + $.fn.mgResizableHeight = function(options) { + var defaults = {prev:this,next:this, prevHtMin:0, prevHtMax:999, nextHtMin:0, nextHtMax:999}; + var opts = $.extend(defaults, options); + var disY = 0, prevH = 0, nextH = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var H = ev.clientY - disY; + var prevHNow = prevH+H, nextHNow = nextH-H; + if(opts.prevHtMin >= prevHNow) { + prevHNow = opts.prevHtMin; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMin >= nextHNow) { + nextHNow = opts.nextHtMin; + prevHNow = prev.outerHeight(); + } + if(opts.prevHtMax <= prevHNow) { + prevHNow = opts.prevHtMax; + nextHNow = next.outerHeight(); + } + if(opts.nextHtMax <= nextHNow) { + nextHNow = opts.nextHtMax; + prevHNow = prev.outerHeight(); + } + //prev.css("height", prevHNow + 'px'); + //next.css("height", nextHNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevHNow, nextHNow); + } + }).mouseup(function(ev){ + isStart = false; + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disY = ev.clientY; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevH = prev.outerHeight(); + nextH = next.outerHeight(); + isStart = true; + }); + } + /** + * 改变宽度的功能,只是实现各种消息的通知,实际改变大小需要在回调里面自己操作 + */ + $.fn.mgResizableWidth = function(options) { + var defaults = {prev:this,next:this, prevWtMin:0, prevWtMax:999, nextWtMin:0, nextWtMax:999}; + var opts = $.extend(defaults, options); + var disX = 0, prevW = 0, nextW = 0, isStart = false; + var prev, next, thisObj = this; + $(document).mousemove(function(ev){ + if(!isStart){return;} + var ev = ev || window.event; + var W = ev.clientX - disX; + var prevWNow = prevW+W, nextWNow = nextW-W; + if(opts.prevWtMin >= prevWNow) { + prevWNow = opts.prevWtMin; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMin >= nextWNow) { + nextWNow = opts.nextWtMin; + prevWNow = prev.outerWidth(); + } + if(opts.prevWtMax <= prevWNow) { + prevWNow = opts.prevWtMax; + nextWNow = next.outerWidth(); + } + if(opts.nextWtMax <= nextWNow) { + nextWNow = opts.nextWtMax; + prevWNow = prev.outerWidth(); + } + //prev.css("width", prevWNow + 'px'); + //next.css("width", nextWNow + 'px'); + if(typeof opts.onresize == 'function') { + opts.onresize(prevWNow, nextWNow); + } + }).mouseup(function(ev){ + if(!isStart){return;} + isStart = false; + if(typeof opts.onfinish == 'function') { + opts.onfinish(); + } + }); + $(this).mousedown(function(ev){ + var ev = ev || window.event; + disX = ev.clientX; + prev = (opts.prev == thisObj)?$(opts.prev).prev():$(opts.prev); + next = (opts.next == thisObj)?$(opts.next).next():$(opts.next); + prevW = prev.outerWidth(); + nextW = next.outerWidth(); + isStart = true; + if(typeof opts.onstart == 'function') { + opts.onstart(); + } + }); + } })(jQuery); \ No newline at end of file diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java index cf2e4e75..ff31cfc3 100644 --- a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java @@ -1,66 +1,66 @@ -package com.zyplayer.doc.swagger.controller; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.zyplayer.doc.core.json.DocResponseJson; -import com.zyplayer.doc.swagger.framework.service.MgStorage; -import com.zyplayer.doc.swagger.framework.service.MgStorageService; - -/** - * 后台存储服务控制器 - * - * @author 暮光:城中城 - * @since 2018年8月21日 - */ -@RestController -@RequestMapping("/swagger-mg-ui/storage") -public class MgStorageController { - - @Autowired - private MgStorageService storageService; - - @PostMapping(value = "/checkConfig") - public DocResponseJson checkConfig() { - return DocResponseJson.ok(); - } - - @PostMapping(value = "/data") - public DocResponseJson setData(String key, String value) { - if (key == null || value == null) { - return DocResponseJson.warn("参数名或值不能为空"); - } - storageService.put(key, value); - return DocResponseJson.ok(); - } - - @GetMapping(value = "/data") - public DocResponseJson getData(String key) { - if (key == null) { - return DocResponseJson.warn("参数名不能为空"); - } - String value = storageService.get(key); - value = (value == null) ? "" : value; - return DocResponseJson.ok(value); - } - - @PostMapping(value = "/delete") - public DocResponseJson delete(String key) { - if (key == null) { - return DocResponseJson.warn("参数名不能为空"); - } - storageService.remove(key); - return DocResponseJson.ok(); - } - - @PostMapping(value = "/like") - public DocResponseJson like(String key, String value) { - List likeList = storageService.like(key, value); - return DocResponseJson.ok(likeList); - } +package com.zyplayer.doc.swagger.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.swagger.framework.service.MgStorage; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; + +/** + * 后台存储服务控制器 + * + * @author 暮光:城中城 + * @since 2018年8月21日 + */ +@RestController +@RequestMapping("/swagger-mg-ui/storage") +public class MgStorageController { + + @Autowired + private MgStorageService storageService; + + @PostMapping(value = "/checkConfig") + public DocResponseJson checkConfig() { + return DocResponseJson.ok(); + } + + @PostMapping(value = "/data") + public DocResponseJson setData(String key, String value) { + if (key == null || value == null) { + return DocResponseJson.warn("参数名或值不能为空"); + } + storageService.put(key, value); + return DocResponseJson.ok(); + } + + @GetMapping(value = "/data") + public DocResponseJson getData(String key) { + if (key == null) { + return DocResponseJson.warn("参数名不能为空"); + } + String value = storageService.get(key); + value = (value == null) ? "" : value; + return DocResponseJson.ok(value); + } + + @PostMapping(value = "/delete") + public DocResponseJson delete(String key) { + if (key == null) { + return DocResponseJson.warn("参数名不能为空"); + } + storageService.remove(key); + return DocResponseJson.ok(); + } + + @PostMapping(value = "/like") + public DocResponseJson> like(String key, String value) { + List likeList = storageService.like(key, value); + return DocResponseJson.ok(likeList); + } } \ No newline at end of file diff --git a/zyplayer-doc-swagger/src/main/resources/document.html b/zyplayer-doc-swagger/src/main/resources/document.html index 7ebf091a..945adc3c 100644 --- a/zyplayer-doc-swagger/src/main/resources/document.html +++ b/zyplayer-doc-swagger/src/main/resources/document.html @@ -44,7 +44,7 @@ -
+
@@ -74,25 +74,6 @@
- -
-
-
- 每次点击在线调试的发送请求后,都会默认保存一次请求的form、header、body数据到网页的本地存储中,以备下次使用,在此页面可以管理这些数据。 - 一般浏览都有5M左右存储空间,如果存储过多有可能会导致部分功能异常,请随时清理一下不再使用的。 -
- - - - -
- - - - - -
接口地址参数配置操作
-