Glassfish中BasicAuth的MySQL表

时间:2013-03-08 16:47:27

标签: mysql rest glassfish basic-authentication

我正在使用Jersey在NetBeans 7.3中部署RESTful Web服务。 我正在使用Glassfish 3.1.2和来自MySQL数据库的数据。 现在我想配置基本身份验证

我首先按照一些教程,在数据库中只有3个表,如下所示: http://jugojava.blogspot.pt/2011/02/jdbc-security-realm-with-glassfish-and.html

一切都很好。但现在,我想在我的数据库中应用它。 表必须遵循某些规则,对吗?我正在尝试创建2个新表: login_groups (就像在教程中一样,但是我在教程中命名为'users'的表是我的已存在的名为“登录”的表格。 但我无法在表login_groups和登录之间创建外键。 我已经在login_groups和groups之间创建了一个,我没有问题。

以下是我的代码表:

登录

  CREATE TABLE `login` (
  `id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `login` varchar(100) COLLATE utf8_bin NOT NULL,
  `password` varchar(32) COLLATE utf8_bin NOT NULL,
  `privileges` enum('system','installer','administrator') COLLATE utf8_bin NOT NULL,
  `secret_id` varchar(32) COLLATE utf8_bin NOT NULL,
  `User_id` mediumint(8) unsigned NOT NULL,
  `isLogged` bit(1) NOT NULL,
  `Language` enum('Portuguese','English') COLLATE utf8_bin NOT NULL,
  `deleted` bit(1) NOT NULL,

  PRIMARY KEY (`id`),
  UNIQUE KEY `secret_id_UNIQUE` (`secret_id`),
  KEY `fk_Login_User1` (`User_id`),
  CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`) 
  ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

 CREATE  TABLE IF NOT EXISTS `lul`.`groups` (
`group_id` MEDIUMINT(8) NOT NULL ,
`group_name` VARCHAR(45) NOT NULL ,
`group_desc` VARCHAR(45) NULL DEFAULT NULL ,

PRIMARY KEY (`group_id`) )
ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;

login_groups

  CREATE  TABLE IF NOT EXISTS `lul`.`login_groups` (
  `login_id` MEDIUMINT(8) NOT NULL ,
  `group_id` MEDIUMINT(8) NOT NULL ,

  PRIMARY KEY (`login_id`, `group_id`) ,
  INDEX `fk_login` (`login_id` ASC) ,
  INDEX `fk_groups` (`group_id` ASC) ,
  CONSTRAINT `fk_login`
  FOREIGN KEY (`login_id` ) REFERENCES `lul`.`login` (`id` )
  ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_groups`
  FOREIGN KEY (`group_id` ) REFERENCES `lul`.`groups` (`group_id` )
  ON DELETE NO ACTION ON UPDATE NO ACTION)

ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin

当我尝试在表login_groups和login之间创建外键时,MySQL中给出的错误是:

在服务器中执行SQL脚本 错误:错误1005: 无法创建表'lul.login_groups'(错误号:150)

请注意,我已尝试单独创建外键,我可以创建第二个。

你知道我做错了什么吗? 或者您是否知道使用表进行基本身份验证的另一种方法?

谢谢

1 个答案:

答案 0 :(得分:0)

所以我通过我的MySQL副本运行你的SQL,我得到的唯一错误是CREATE TABLE login脚本;它不喜欢

中对表user的引用
CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`)
ON DELETE NO ACTION ON UPDATE NO ACTION

我认为你已经在其他地方定义过了?

login_groups完全没问题。您是否尝试使用数据更改现有表,其中该数据违反了任何所需的约束[在该表中未定义另一个表中引用的ID]?