日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

groovy grails_在Grails战争中添加一个“精简”的Groovy Web控制台

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 groovy grails_在Grails战争中添加一个“精简”的Groovy Web控制台 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

groovy grails

假設(shè)您已將Grails應(yīng)用程序部署到服務(wù)器上–如何查找應(yīng)用程序的配置方式? 如果您有來(lái)源,則可以查看Config.groovy , BuildConfig.groovy等(在這種情況下,我正在談?wù)揋rails 2應(yīng)用程序,但是這些想法可以推廣到Grails 3+),但這通常還不夠。

Grails 2支持外部配置文件,該文件可以在不同的地方并合并到最終配置中。 但是僅僅擁有您認(rèn)為正確的源文件和配置文件是不夠的,因?yàn)榭赡芤呀?jīng)進(jìn)行了一些更改,而這些更改并未納入源代碼管理中。 而且,由于它們已被編譯為類(lèi),因此您無(wú)法輕易地從WAR中的這些文件中獲取信息。

我更喜歡挖掘正在運(yùn)行的Grails應(yīng)用程序是控制臺(tái)插件,但要使用該插件,您需要將其添加到BuildConfig.groovy并構(gòu)建和部署新的WAR,但這又不一定與先前的配置相同。部署。

我在工作時(shí)遇到這種情況,因此我想出了一種輕巧的方法,可以將類(lèi)似于控制臺(tái)插件的基于Web的控制臺(tái)添加到WAR中。 最初,它是一個(gè)servlet,它以簡(jiǎn)單的形式生成HTML,其中包含用于Groovy代碼的文本區(qū)域和用于提交要在服務(wù)器上運(yùn)行的代碼的提交按鈕,以及用于執(zhí)行代碼和返回結(jié)果到瀏覽器。 我在構(gòu)建WAR的同一項(xiàng)目中對(duì)其進(jìn)行了編譯,以確保它與Groovy,Grails,Spring等版本兼容,然后將.class文件復(fù)制到Tomcat的webapps文件夾的展開(kāi)目錄中的WEB-INF/classes中。 ,并手動(dòng)編輯WEB-APP/web.xml以添加所需的<servlet>和<servlet-mapping>元素,并且一切在我的小型測(cè)試應(yīng)用程序中都很好用。

但是當(dāng)我在真實(shí)的應(yīng)用程序中嘗試它時(shí),由于Spring Security的緣故,我無(wú)法訪問(wèn)它。 在這種特殊情況下,我可以解決該問(wèn)題,因?yàn)樵搼?yīng)用程序?qū)equestmap實(shí)例存儲(chǔ)在數(shù)據(jù)庫(kù)中,但我不想進(jìn)行可能忘記撤消的更改,并且存在雞與蛋的問(wèn)題必須知道此部署的數(shù)據(jù)庫(kù)設(shè)置是什么。 因此,我改為將servlet轉(zhuǎn)換為servlet過(guò)濾器,并確保將過(guò)濾器添加到web.xml的Spring Security過(guò)濾器鏈之前,并在重新啟動(dòng)服務(wù)器后按預(yù)期工作。

我在爆炸的war目錄中進(jìn)行了更改,但是也可以在WAR文件本身中進(jìn)行更改。 由于WAR文件是ZIP文件,因此您可以解壓縮WAR,進(jìn)行更改并重新壓縮。

這是過(guò)濾器的來(lái)源:

package com.burtbeckwith.hackimport groovy.transform.CompileStatic import groovy.util.logging.Slf4j import org.codehaus.groovy.grails.commons.GrailsApplication import org.springframework.context.ApplicationContext import org.springframework.web.context.support.WebApplicationContextUtilsimport javax.servlet.Filter import javax.servlet.FilterChain import javax.servlet.FilterConfig import javax.servlet.ServletException import javax.servlet.ServletRequest import javax.servlet.ServletResponse import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse@CompileStatic @Slf4j class HackFilter implements Filter {private ApplicationContext applicationContextprivate GrailsApplication grailsApplicationvoid init(FilterConfig fc) throws ServletException {applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(fc.servletContext)grailsApplication = applicationContext.getBean(GrailsApplication)}void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) reqHttpServletResponse response = (HttpServletResponse) resif ('GET' == request.method) {doGet request, response}else {// assume POSTdoPost request, response}}void destroy() {}private void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.writer.write html(request.contextPath)}private void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {long startTime = System.currentTimeMillis()String code = request.getParameter('code')ByteArrayOutputStream baos = new ByteArrayOutputStream()PrintStream out = new PrintStream(baos)PrintStream systemOut = System.outThrowable eString result = ''try {System.out = outresult = new GroovyShell(grailsApplication.classLoader, new Binding(config: grailsApplication.config,ctx: applicationContext,grailsApplication: grailsApplication,out: out,request: request,session: request.session)).evaluate(code)}catch (Throwable t) {e = t}finally {System.out = systemOut}if (e) {StringWriter sw = new StringWriter()e.printStackTrace new PrintWriter(sw)result = sw.toString().replace('\t', ' ').replace(System.getProperty('line.separator'), '<br/>\n')}response.writer << html(request.contextPath, code, """\ Total time: ${System.currentTimeMillis() - startTime}msStdout: ${baos.toString('UTF8')}${e ? 'Exception' : 'Result'}: $result""")}private String html(String contextPath, String code = '', String results = '') {"""\ <html> <head> <title>Hack</title> </head> <body><form action="$contextPath/hack" method="POST"><span>Code: (binding vars include <i>config</i>, <i>ctx</i>, <i>grailsApplication</i>, <i>out</i>, <i>request</i>, <i>session</i>)</span><br/><textarea name="code" cols="120" rows="25">$code</textarea><br/><input type="submit" value="Execute" name="execute" /><br/><span>Results:</span><br/><textarea name="results" cols="120" rows="25" disabled="disabled">$results</textarea></form> </body> </html> """} }

這些是web.xml的相應(yīng)<filter>和<filter-mapping>元素:

<filter><filter-name>hack</filter-name><filter-class>com.burtbeckwith.hack.HackFilter</filter-class> </filter> <filter-mapping><filter-name>hack</filter-name><url-pattern>/hack</url-pattern> </filter-mapping>

要訪問(wèn)控制臺(tái),請(qǐng)導(dǎo)航至http:// server:port / contextPath / hack。 與在控制臺(tái)插件中一樣,您可以運(yùn)行任意的Groovy代碼(包括服務(wù)方法調(diào)用,使用域類(lèi)等),并且在綁定中可以使用多個(gè)對(duì)象– config , ctx , grailsApplication , out , request和session 。

要將uri從/ hack更改為其他內(nèi)容,請(qǐng)確保同時(shí)更新web.xml的<url-pattern>標(biāo)簽和過(guò)濾器類(lèi)中生成的表單中的action屬性。

假設(shè)您已將Grails應(yīng)用程序部署到服務(wù)器上–如何查找應(yīng)用程序的配置方式? 如果您有資源,那么您……

此條目發(fā)布于2017年12月7日星期四上午8:23,并根據(jù)grails , groovy , java , security提交。 您可以通過(guò)RSS 2.0 feed跟蹤對(duì)此條目的任何響應(yīng)。 您可以在自己的網(wǎng)站上留下回應(yīng) (審核審核)或引用 。

翻譯自: https://www.javacodegeeks.com/2017/12/adding-lite-groovy-web-console-grails-war.html

groovy grails

總結(jié)

以上是生活随笔為你收集整理的groovy grails_在Grails战争中添加一个“精简”的Groovy Web控制台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人无码精品久久久电影 | 40到50岁中老年妇女毛片 | 老头吃奶性行交 | 无码精品人妻一区二区 | 亚洲视频国产 | 苍井空浴缸大战猛男120分钟 | 内地级a艳片高清免费播放 91在线精品一区二区 | 啊v视频在线| 亚洲区一| 一级黄色片网站 | 乱人伦xxxx国语对白 | 国产一级爽片 | 激情一区二区 | 97超碰人人看 | 黄色一级网| 免费成人高清视频 | 三上悠亚ed2k | 九九爱视频 | 久久久久99精品成人片毛片 | 日韩欧美一级二级 | 国产手机看片 | 手机在线观看日韩av | 四虎4hu| 亚洲欧美一区在线 | 潘金莲三级80分钟 | 久久精品久久精品久久精品 | 中国毛片网站 | 久久鲁视频 | 伊人久久一区二区 | aa成人| 日本在线不卡一区 | 中文字幕在线欧美 | 麻豆国产精品777777在线 | 91精品国产闺蜜国产在线闺蜜 | 午夜激情电影在线观看 | 日韩精品久久久久久久的张开腿让 | 日本a级片免费 | 午夜影院污 | 麻豆出品 | 欧美一区二区高清视频 | 有码视频在线观看 | 国产精品美女久久久 | 96精品国产 | 欧美视频在线观看 | 黄色在线免费观看视频 | 日韩一三区 | 在线观看黄色国产 | 乱日视频 | 激情欧美一区二区三区精品 | 亚洲图片小说区 | 在线播放av网站 | 欧美日韩一区二区三区四区五区 | 天天色天天草 | 日韩在线播放av | 欧美日韩精品久久久免费观看 | 十八禁一区二区三区 | 中文字幕日韩精品在线 | jizz中国女人高潮 | av黄色大片 | 国产高清免费在线 | 同心兄弟| 欧美性色网站 | 亚洲乱码一区二区三区 | 人妻少妇偷人精品视频 | 午夜精品久久久久久久久久久 | 亚洲成人激情在线 | 国产激情四射 | 欧美乱论视频 | 国产电影一区在线观看 | 天天谢天天干 | 麻豆一级片 | 日韩在线小视频 | 国产一级免费片 | 91国偷自产中文字幕久久 | 日韩av免费网站 | 白又丰满大屁股bbbbb | 欧美污污视频 | 国产综合免费视频 | 在线免费观看国产精品 | 优优色影院 | www.色国产 | 午夜在线成人 | 三级黄色免费 | 午夜精品久久久久久久久久久久久 | 国产中文网 | 国产人澡人澡澡澡人碰视频 | 先锋影音亚洲 | 伊人精品视频 | 三上悠亚三级 | 色一情一乱一区二区三区 | 国产在线不卡一区 | 欧美人性生活视频 | 亚洲国产系列 | 欧美五月婷婷 | 免费在线看a | 美女久久久 | 丰满大乳露双乳呻吟 | 美日韩一区 | 丝袜 亚洲 另类 欧美 重口 |