2

这些天我正在使用更多的 groovy,我遇到了一个问题,我想将子字符串提升到一个已知字符。简而言之,我试图从 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(';')我认为我可能至少在另一种语言中看到过的东西。总体而言,我认为可能有 4-5 种更好的方法来获取 cookie,而无需其他路径和安全措辞。

4

1 回答 1

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

虽然我不建议这样做。

于 2012-05-28T06:26:19.113 回答