Я пытаюсь реализовать безопасность в простом веб-приложении, но я не смог получить ее правильно.Java EE Web Security с WildFly 8
У меня есть DataSource «SecurityTestDS», работающий. В standalone.xml у меня есть:
<default-security-domain value="jdbc-security-domain"/>
<security-domain name="jdbc-security-domain" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<!--<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">-->
<module-option name="dsJndiName" value="java:jboss/datasources/SecurityTestDS"/>
<module-option name="principalsQuery" value="select password from cb_users where username = ?"/>
<module-option name="rolesQuery" value="select groupname Roles from cb_groups where username = ?"/>
<module-option name="hashAlgorithm" value="MD5"/>
<module-option name="hashEncoding" value="base64"/>
<module-option name="unauthenticatedIdentity" value="guest"/>
</login-module>
</authentication>
</security-domain>
JBoss-web.xml содержит
<security-domain>jdbc-security-domain</security-domain>
<!-- <security-domain>java:/jaas/jdbc-security-domain</security-domain>-->
<disable-audit>false</disable-audit>
web.xml содержит:
<security-constraint>
<display-name>protected-pages</display-name>
<web-resource-collection>
<web-resource-name>protected-pages</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc-security-domain</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/loginError.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>user</role-name>
</security-role>
login.jsp
<form action="j_security_check" method=post>
<p>
<strong>Username:</strong>
<input type="text" name="j_username" size="25">
<p>
<p>
<strong>Password: </strong>
<input type="password" size="15" name="j_password">
<p>
<p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
LoginError.jsp содержит
<h2>Invalid user name or password.</h2>
База данных является:
CREATE TABLE `cb_groups` (
`groupname` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID_UNIQUE` (`ID`)
);
INSERT INTO `cb_groups` VALUES ('admin','admin',1),('user','user',2);
CREATE TABLE `cb_users` (
`username` varchar(255) NOT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`username`)
);
INSERT INTO `cb_users` VALUES ('admin','21232F297A57A5A743894A0E4A801FC3'),('user','21232F297A57A5A743894A0E4A801FC3');
Я использовал фрагмент кода для создания хэш вставленный в базу данных.
System.out.println(DatatypeConverter.printHexBinary(MessageDigest.getInstance("MD5").digest("admin".getBytes("UTF-8"))));
К сожалению доступ к/contextRoot/защищаемого/* всегда возвращает страницу Войти все попытки athenticate либо имя пользователя/пароль, как пользователь/администратор или администратор/администратор всегда возвращает «Неверное имя пользователя или пароль» от loginError. jsp с любым журналом сервера. Любая помощь будет оценена.
Для начала: https://java.net/projects/javaee-spec/pages/JEE – BalusC