gpt4 book ai didi

重定向后 Grails 2.1.0 app tomcat 7.0.22 session 为空

转载 作者:行者123 更新时间:2023-12-04 23:51:33 26 4
gpt4 key购买 nike

我刚刚学习 grails,我遇到了一个应用程序问题,当我在 Netbeans 中运行它时它运行良好,但当部署到 Centos 5.4 服务器上的 Tomcat 7.0.22 时却显示出奇怪的行为。我正在使用 proxy_ajp 使应用程序可用于 apache。

问题似乎是在重定向后 session 没有得到维护,因此我丢失了导致应用程序尝试再次登录的登录信息。

我的 proxy_ajp 设置是

<Location /PreyerBooks >
ProxyPass ajp://localhost:8011/PreyerBooks
ProxyPassReverse ajp://localhost:8011/PreyerBooks
</Location>

应用程序部署无误,与数据库和 LDAP 的连接正常。我通过如下登录身份验证方法对此进行了测试

UserController - 认证功能

 def authenticate = {
def password=passhash(params.password)
log.info " login attempt ${params.login} - ${params.password} - ${password}"
def match = User.findAll(
directory: "user",
filter: "(&(uid=${params.login})(userpassword=${password}))"
)
log.info " match ${match}"
if (match) {
def user = Employee.findByLogin(params.login)
log.info " user ${user} - ${user?.role}"
if(user){
session.user = user
log.info "success"
flash.message = "Hello ${user.firstname}!"
redirect(controller:"Book", action:"index")
}else{
log.error "failed login attempt mismatch to ldap ${params.login}"
flash.message = "Sorry, ${params.login}. Please try again."
redirect(action:"login")
}
}else{
log.error "failed login attempt ${params.login} - ${params.password}"
flash.message = "Sorry, ${params.login}. Please try again."
redirect(action:"login")
}
}

BookController - auth 函数(检查是否登录)

  def beforeInterceptor = [action:this.&auth, except:[]]

def auth() {
log.info "BookController:auth() ${session}"

if(!session.user) {
redirect(controller:"User", action:"login")
return false
}
log.info "BookController:auth() working"
return true
}

日志显示

 INFO  books.UserController  -  login attempt username - password - passwordhash
INFO books.UserController - match [de.preyer.books.User@d4a1cc]
INFO books.UserController - user username - admin
INFO books.UserController - success
INFO books.BookController - BookController:auth() Session Content:

session.user 变量已经消失。我检查了 passwordhash,它与 LDAP 服务器正确匹配(因此对象引用匹配)。在获得其角色的数据库中正确找到该用户。

我无法直接访问该应用程序,因为端口在防火墙中被阻止,我无法打开它。因此,我无法测试问题是否出在 ajp 或 tomcat 中

我已尝试搜索指定为标题的条件,但没有找到任何相关内容。

a) 浏览器 cookie 已启用并正常工作,我尝试了 Safari、Firefox 和 Chrome,但均未成功。我不认为这是一个浏览器问题,因为相同的浏览器与 NetBeans 中的应用程序一起工作(我认为使用码头)

b) 我已将 grails.serverURL = "http://servername/PreyerBooks" 设置为完全限定的域

如果我关闭身份验证,该应用程序将正常运行。

我一定是做错了什么或者错过了部署中的一个步骤。

现在我知道我可以包含一个使用 Spring Core 的插件,但这对我的应用程序来说太过分了,并且进一步增加了调试的复杂性。我希望在继续之前让当前的实现工作。该逻辑是从 Grails 2.1.0 文档中复制的,因此它应该可以工作。

我读入了httpSession事情必须是可序列化的,但如果文档中的示例不起作用,为什么当我在 NetBeans 中运行该应用程序时该应用程序可以运行?

我很茫然。任何帮助将不胜感激。

最佳答案

使用 spring-security-core 插件(或 Shiro,或任何已建立的、经过验证的安全实现)。这并不复杂,自行部署安全措施是被黑客入侵的捷径。

关于重定向后 Grails 2.1.0 app tomcat 7.0.22 session 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com