Wildfly:服务器重启后授权失败
Wildfly: authorization fails after server restart
我首先进行所需的设置(如下所述)。一切正常,但当我重新启动 standalone.sh
并执行 SOAP 请求时,我只收到此响应:
<html>
<head>
<title>Error</title>
</head>
<body>Unauthorized</body>
</html>
并且在带有 standalone.sh
的终端中我得到:
ERROR [org.jboss.security] (default task-1) PBOX00261: Failed to load users/passwords/roles files: java.io.IOException: PBOX00072: Properties file users.properties/defaultUsers.properties not found
我应该怎么做才能使授权生效?
设置
这就是我设置所有内容的方式:
- I 运行
mvn archetype:generate
并从 org.wildfly.archetype:wildfly-javaee7-webapp-ear-blank-archetype
原型创建项目
groupId: pl.edu.agh.soa
artifactId: 实验室
- 我在
lab/lab-ejb/src/main/java/pl/edu/agh/soa
中创建了一个 class Hello.java
:
@Stateless
@WebService
@SecurityDomain("domain1")
@DeclareRoles({"developer"})
@WebContext(
authMethod="BASIC",
transportGuarantee="NONE")
public class Hello {
private List<String> subjects = new ArrayList<>();
private String name;
private String surname;
@WebMethod
@RolesAllowed("developer")
@XmlElementWrapper(name="subjects")
@XmlElement(name="subject")
public List<String>
listSubjects(@WebParam(name="filter") String filter) {
List<String> filtered = new ArrayList<>();
for(String elem : this.subjects) {
if(elem.contains(filter)) {
filtered.add(elem);
}
}
return filtered;
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
addSubject(@WebParam(name="subj") String subj) {
this.subjects.add(subj);
return "After add: " + this.subjects.toString();
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
editName(String name) {
String before = this.name;
this.name = name;
return "Before: " + before;
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
editSurname(String surname) {
String before = this.surname;
this.surname = surname;
return "Before: " + before;
}
}
- 我用 add-user.sh
添加 user3
- 用
jboss-cli.sh
创建一个新的安全域,我粘贴:
/subsystem=security/security-domain=domain1/:add(cache-type=default)
/subsystem=security/security-domain=domain1/authentication=classic:add(login-modules=[{"code"=>"UsersRoles","flag"=>"required","module-options"=>[("usersProperties"=>"users.properties"),("rolesProperties"=>"roles.properties")]}])
- 我在
lab/lab-ejb/src
中创建 users.properties
和 roles.properties
文件
您可以尝试将 roles.properties
和 users.properties
放在另一个目录中,例如: \wildfly-20.0.1.Final\standalone\configuration
或 src/main/resources
我首先进行所需的设置(如下所述)。一切正常,但当我重新启动 standalone.sh
并执行 SOAP 请求时,我只收到此响应:
<html>
<head>
<title>Error</title>
</head>
<body>Unauthorized</body>
</html>
并且在带有 standalone.sh
的终端中我得到:
ERROR [org.jboss.security] (default task-1) PBOX00261: Failed to load users/passwords/roles files: java.io.IOException: PBOX00072: Properties file users.properties/defaultUsers.properties not found
我应该怎么做才能使授权生效?
设置
这就是我设置所有内容的方式:
- I 运行
mvn archetype:generate
并从org.wildfly.archetype:wildfly-javaee7-webapp-ear-blank-archetype
原型创建项目
groupId: pl.edu.agh.soa
artifactId: 实验室
- 我在
lab/lab-ejb/src/main/java/pl/edu/agh/soa
中创建了一个 classHello.java
:
@Stateless
@WebService
@SecurityDomain("domain1")
@DeclareRoles({"developer"})
@WebContext(
authMethod="BASIC",
transportGuarantee="NONE")
public class Hello {
private List<String> subjects = new ArrayList<>();
private String name;
private String surname;
@WebMethod
@RolesAllowed("developer")
@XmlElementWrapper(name="subjects")
@XmlElement(name="subject")
public List<String>
listSubjects(@WebParam(name="filter") String filter) {
List<String> filtered = new ArrayList<>();
for(String elem : this.subjects) {
if(elem.contains(filter)) {
filtered.add(elem);
}
}
return filtered;
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
addSubject(@WebParam(name="subj") String subj) {
this.subjects.add(subj);
return "After add: " + this.subjects.toString();
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
editName(String name) {
String before = this.name;
this.name = name;
return "Before: " + before;
}
@WebMethod
@RolesAllowed("developer")
@WebResult
public String
editSurname(String surname) {
String before = this.surname;
this.surname = surname;
return "Before: " + before;
}
}
- 我用 add-user.sh 添加
- 用
jboss-cli.sh
创建一个新的安全域,我粘贴:
user3
/subsystem=security/security-domain=domain1/:add(cache-type=default)
/subsystem=security/security-domain=domain1/authentication=classic:add(login-modules=[{"code"=>"UsersRoles","flag"=>"required","module-options"=>[("usersProperties"=>"users.properties"),("rolesProperties"=>"roles.properties")]}])
- 我在
lab/lab-ejb/src
中创建
users.properties
和 roles.properties
文件
您可以尝试将 roles.properties
和 users.properties
放在另一个目录中,例如: \wildfly-20.0.1.Final\standalone\configuration
或 src/main/resources