这些天我使用的更加时髦,我遇到了一个问题,我想把子字符串带到一个已知字符。简而言之,我正在尝试从HTTP标头中获取会话cookie。我的代码是这样的:
def cookie = connection.headerFields.find{ it.key =='Set-Cookie'}.value[0]
cookie = cookie[0..cookie.indexOf(';')-1]
其中connection是对URLConnection的引用。如果没有额外的操作,我会得到像"[JSESSIONID=72Q4TCEEDC21GX9152E7702A23DC3854E; Path=/; Secure]"
这样的值。最终结果是预期的会话ID "JSESSIONID=72Q4TCEEDC21GX9152E7702A23DC3854E"
。但我不禁想到必须有一个更加时髦的方式来解决这个问题。简而言之,我错过了一个substringToString(';')
,我想我至少可以用另一种语言看到它。总的来说,我认为在没有其他路径和安全措辞的情况下抓取cookie可能有4-5种更好的方法。
答案 0 :(得分:2)
看起来你让事情复杂化了。为什么你不能这样做:
// if you want all cookies
def cookies = request.cookies
// if you need a particular cookie
def cookie = request.cookies.find { it == 'cookie-name' }
以上方式适用于控制器。从服务层你需要先做这样的事情:
def request = RequestContextHolder.currentRequestAttributes().request
虽然我不建议这样做。