2015-01-25 4 views
1

Я пытаюсь реализовать безопасность в простом веб-приложении, но я не смог получить ее правильно.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 с любым журналом сервера. Любая помощь будет оценена.

+4

Для начала: https://java.net/projects/javaee-spec/pages/JEE – BalusC

ответ