有Grails 3.2.11(Spring 4.3.1,Spring Websocket 4.3.9)我收到websocket会话空闲的日志错误消息.
2017-08-09 14:06:45,820 ERROR org.springframework.web.socket.messaging.SubProtocolWebSocketHandler - No messages received after 62082 ms. Closing EventSourceStreamingSockJsSession[id=bka1ui0i].
Run Code Online (Sandbox Code Playgroud)
观察:
更大的检查日志:
2017-08-09 14:37:57,157 DEBUG myapp.websocket.WebSocketConfig - websocket inbout channel received message GenericMessage [payload=byte[0], headers={simpMessageType=CONNECT, stompCommand=CONNECT, nativeHeaders={Authorization=[Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9FUkRRVEF5TVVKQlJrRkRPVFl3TTBNd1JUTXhSRVk0TVVaRFF6aERNVUpGUmpJME5EY3pRdyJ9.eyJpc3MiOiJodHRwczovL2FtaW8uZXUuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDU5NWI2M2UxYTE3ZDM1MTNlMjliYWNjMyIsImF1ZCI6Imh0dHBzOi8vYXBwLmFtaW8uaW8iLCJhenAiOiIwRmFoQlJSSkp0WW5LN2xDb0dIZHV3SEJGNHNiSGVjWiIsImV4cCI6MTUwMjI4OTU1MiwiaWF0IjoxNTAyMjAzMTUyLCJzY29wZSI6IiIsImd0eSI6InBhc3N3b3JkIiwiaHR0cHM6Ly9hcHAuYW1pby5pby9vcmdhbml6YXRpb25JZCI6IjYyMDQ2MzA0NDIifQ.RqeXHDwcTmuj9h5pCYWh6DXyRKrycA5id6G-fJ4SXIdnjEBE6eukm-emXGG5S4RZ-zCR_2DJGaVXSp9UXd6j3lnvO-b6U7exOzLg6Mku4-jQmeDy0vGaCnYZfVrSqtzCSZ-WVt4k-lzgfPqWiMlvHxC5C9q5uaeBkiUXrYt5Xv9QuMzeWdvhwrfyfILZLhSByBXTYHmT-0a0dIsFMpNGBZy7nPVKTdOILKRSNtpJZ6riiYFTJGTzKYj1RnAym7oT-uIJZF2i1BYfTqSPAdx9iiXnFV0AjswFs-Lby5DbMR50J8zfpWWfVQ4HBsQZTi3hkacctQ9PHU90o81UySh3vw], accept-version=[1.2,1.1,1.0], heart-beat=[10000,10000]}, simpSessionAttributes={}, simpHeartbeat=[J@517fa790, simpSessionId=xypqdnz2}]
2017-08-09 14:37:57,242 DEBUG myapp.websocket.WebSocketConfig - websocket inbout channel received message GenericMessage [payload=byte[0], headers={simpMessageType=SUBSCRIBE, stompCommand=SUBSCRIBE, nativeHeaders={Authorization=[Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9FUkRRVEF5TVVKQlJrRkRPVFl3TTBNd1JUTXhSRVk0TVVaRFF6aERNVUpGUmpJME5EY3pRdyJ9.eyJpc3MiOiJodHRwczovL2FtaW8uZXUuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDU5NWI2M2UxYTE3ZDM1MTNlMjliYWNjMyIsImF1ZCI6Imh0dHBzOi8vYXBwLmFtaW8uaW8iLCJhenAiOiIwRmFoQlJSSkp0WW5LN2xDb0dIZHV3SEJGNHNiSGVjWiIsImV4cCI6MTUwMjI4OTU1MiwiaWF0IjoxNTAyMjAzMTUyLCJzY29wZSI6IiIsImd0eSI6InBhc3N3b3JkIiwiaHR0cHM6Ly9hcHAuYW1pby5pby9vcmdhbml6YXRpb25JZCI6IjYyMDQ2MzA0NDIifQ.RqeXHDwcTmuj9h5pCYWh6DXyRKrycA5id6G-fJ4SXIdnjEBE6eukm-emXGG5S4RZ-zCR_2DJGaVXSp9UXd6j3lnvO-b6U7exOzLg6Mku4-jQmeDy0vGaCnYZfVrSqtzCSZ-WVt4k-lzgfPqWiMlvHxC5C9q5uaeBkiUXrYt5Xv9QuMzeWdvhwrfyfILZLhSByBXTYHmT-0a0dIsFMpNGBZy7nPVKTdOILKRSNtpJZ6riiYFTJGTzKYj1RnAym7oT-uIJZF2i1BYfTqSPAdx9iiXnFV0AjswFs-Lby5DbMR50J8zfpWWfVQ4HBsQZTi3hkacctQ9PHU90o81UySh3vw], accept-version=[1.2,1.1,1.0], heart-beat=[10000,10000], id=[sub-0], destination=[/topic/organizations/6204630442/conversations]}, simpSessionAttributes={}, simpHeartbeat=[J@57ba18ca, simpSubscriptionId=sub-0, simpSessionId=xypqdnz2, simpDestination=/topic/organizations/6204630442/conversations}]
2017-08-09 14:38:07,204 DEBUG myapp.websocket.WebSocketConfig - websocket inbout channel received …Run Code Online (Sandbox Code Playgroud) grails spring amazon-web-services websocket spring-websocket
当我设置client_max_body_size 30m;没有 ssl 时,一切正常(接受最大 30MB 的文件)。然而,当我切换到 ssl 时,它完全忽略了这个指令。
我的配置如下所示(/etx/nginx/conf.d/my-sites.com.conf):
server {
listen 443 ssl;
server_name my-sites.com;
ssl_certificate /etc/nginx/ssl/my-sites.com/uni_my-sites.com.crt;
ssl_certificate_key /etc/nginx/ssl/my-sites.com/my-sites.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
client_max_body_size 30m;
location / {
proxy_pass http://my-backend.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里发现了几个建议nginx - client_max_body_size 没有效果,但没有任何效果。我尝试使用不同的 nginx 版本,我为所有块设置了 client_max_body_size:http、服务器、位置,但没有任何效果。
我还搜索了是否是 nginx bug,但没有结果。
有什么解决方案可以解决这个问题还是我被迫使用非 ssl 连接?欢迎任何建议。
我的配置是:
我想立即在我的Grails应用程序中传播用户更改(更改用户角色)(我正在使用Spring Security Plugin).
我发现了这个:
springSecurityService.reauthenticate(userName)
Run Code Online (Sandbox Code Playgroud)
但这适用于当前登录的用户,而不适用于更改用户!
有没有任何简单的解决方案(甚至强制注销已更改的用户将足够我).
用户的用例是当管理员更改其他一些用户角色时.如果已更改的用户已登录,则在Spring Security的上下文中不会立即看到角色更改.
似乎在Grails中或者更好地说Groovy,不可能将日志记录模式设置为记录行号,方法和类名.或者你可以,但你会收到Log4j类的行号和方法名称,如:
%F:%L -? SLF4JLog.java:213
Run Code Online (Sandbox Code Playgroud)
我发现了一个与Grails无关的问题:http: //jira.grails.org/browse/GRAILS-9789
那么如何在Grails中记录这些信息呢?
根据 Spring Boot 文档,可以通过使用 Spring Boot Logging Starter 并在应用程序属性中设置适当的 logging.level 来设置多个日志记录框架(jul、slf4j 等)的日志记录级别。除了我使用的库使用 jul 和日志级别 Level.FINER 进行日志记录外,一切正常。但是,Level.INFO 已正确记录。
我将 application.properties 中的级别设置为:
logging.level.=TRACE
Run Code Online (Sandbox Code Playgroud)
它应该根据SLF4JBridgeHandler记录所有内容。
我是否缺少某些东西,或者是 logback 的问题(由初学者使用)而不是我的误解?
我想知道grails createCriteria是否支持多个属性组,如纯sql.我想列出这样的条目:
def criteria = DomainClass.createCriteria()
def results = criteria.list {
groupProperty('parameterA')
groupProperty('parameterB')
}
Run Code Online (Sandbox Code Playgroud)
这将仅列出具有唯一parameterA和parameterB组合的条目.问题是,这不起作用,是否有任何解决方案或我应该使用hsql或simmilar?
谢谢,马特奥
我想知道如何从Groovy甚至Java中的格式化字符串中读取单个属性有什么好方法.
我有一个包含由空格分隔的属性的字符串.例如"2.1 20 Something true".订单是固定的,"属性类型"是已知的(例如,首先是Float,第二个是Integer等).我需要类似String.format()的东西,但其他方式.
我知道我可以手动拆分字符串并读取值,但这会使代码过于复杂,如下所示:
String[] parsedText = "2.1 20 Something true".split(delimiter)
try {
firstVal = new Float(parsedText[0])
}
catch (NumberFormatException e) {
throw new RuntimeException("Bad data [0th position in data string], cannot read[{$parsedData[0]}], cannot convert to float")
}
...
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?我很确定至少在Groovy中是:-)
谢谢!
有什么方法可以支持在Hibernate 5.1.1中将java.time.ZoneId持久映射到字符串。现在,它以二进制形式保存ZoneId。
我刚刚升级到具有Hibernate 5.1.1的Grails 3.2.1。例如,保存java.time.Instant效果很好,但是java.time.ZoneId仅以二进制形式存储。
我认为没有Hibernate的支持。那么我该如何编码自己的映射。我尝试使用Jadira Framework,但由于启动grails应用程序时存在一些冲突(例外),因此无法使用。