一个jaas的问题,一天了也没有搞定,找不到问题。
4个文件
1.ConsoleCallbackHandler.java
package test;
import javax.security.auth.login.*;
import javax.security.auth.callback.*;
import java.io.*;
public class ConsoleCallbackHandler implements CallbackHandler {
public void handle(Callback callbacks[]) throws java.io.IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
NameCallback nameCb = (NameCallback) callbacks[i];
System.out.print(nameCb.getPrompt());
String user = (new BufferedReader(new InputStreamReader(System.in))).
readLine();
nameCb.setName(user);
}
else if (callbacks[i] instanceof PasswordCallback) {
PasswordCallback passCb = (PasswordCallback) callbacks[i];
System.out.print(passCb.getPrompt());
String pass = (new BufferedReader(new InputStreamReader(System.in))).
readLine();
passCb.setPassword(pass.toCharArray());
}
else {
throw (new UnsupportedCallbackException(callbacks[i],
"Callback class not supported"));
}
}
}
}
2.RdbmsLoginModule.java
package test;
import javax.security.auth.spi.LoginModule;
import javax.security.auth.callback.*;
import java.util.*;
import javax.security.auth.*;
public class RdbmsLoginModule implements LoginModule {
private CallbackHandler callbackHandler;
public RdbmsLoginModule() {
}
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options) {
this.callbackHandler=callbackHandler;
String s1 = (String) options.get("url");
System.out.println(s1);
}
public boolean login() {
NameCallback nameCb = new NameCallback("user: ");
PasswordCallback passCb = new PasswordCallback("password: ", true);
Callback[] callbacks = new Callback[] {
nameCb, passCb};
try{
callbackHandler.handle(callbacks);
}catch(Exception e){
e.printStackTrace();
}
String username = nameCb.getName();
String password = new String(passCb.getPassword());
if (username.equals("songlipeng2003") && password.equals("2010525")) {
return true;
}
else {
return false;
}
}
public boolean logout() {
return false;
}
public boolean abort() {
return false;
}
public boolean commit() {
return false;
}
}
3.Hello.java
package test;
import javax.security.auth.login.*;
public class Test {
public static void main(String[] args) {
System.setProperty("javax.security.auth.login.config","./test.config");
ConsoleCallbackHandler handler=new ConsoleCallbackHandler();
try{
LoginContext lc=new LoginContext("hello",handler);
lc.login();
}catch(LoginException e){
e.printStackTrace();
}
}
}
4.test.config
hello {
test.RdbmsLoginModule required debug=true;
};
出现异常:
--------------------Configuration: <Default>--------------------
Exception in thread "main" java.lang.SecurityException: 无法定位登录配置
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:93)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at javax.security.auth.login.Configuration$3.run(Configuration.java:246)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:241)
at javax.security.auth.login.LoginContext$1.run(LoginContext.java:237)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.init(LoginContext.java:234)
at javax.security.auth.login.LoginContext.<init>(LoginContext.java:403)
at test.Test.main(Test.java:10)
Caused by: java.io.IOException: 无法定位登录配置
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:250)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91)
... 14 more
这些文件都放在同一个文件夹下啊,路径应该没有问题。登录config文件也应该没有问题,改了好多次了啊。都是这个错误,我从IBM下了一个和这个差不多的例子,就是可以运行,但是不知道我错到了那里啊。
ibm的相关例子的网址:http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/rzaha/jaashllo.htm
1.ConsoleCallbackHandler.java
package test;
import javax.security.auth.login.*;
import javax.security.auth.callback.*;
import java.io.*;
public class ConsoleCallbackHandler implements CallbackHandler {
public void handle(Callback callbacks[]) throws java.io.IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof NameCallback) {
NameCallback nameCb = (NameCallback) callbacks[i];
System.out.print(nameCb.getPrompt());
String user = (new BufferedReader(new InputStreamReader(System.in))).
readLine();
nameCb.setName(user);
}
else if (callbacks[i] instanceof PasswordCallback) {
PasswordCallback passCb = (PasswordCallback) callbacks[i];
System.out.print(passCb.getPrompt());
String pass = (new BufferedReader(new InputStreamReader(System.in))).
readLine();
passCb.setPassword(pass.toCharArray());
}
else {
throw (new UnsupportedCallbackException(callbacks[i],
"Callback class not supported"));
}
}
}
}
2.RdbmsLoginModule.java
package test;
import javax.security.auth.spi.LoginModule;
import javax.security.auth.callback.*;
import java.util.*;
import javax.security.auth.*;
public class RdbmsLoginModule implements LoginModule {
private CallbackHandler callbackHandler;
public RdbmsLoginModule() {
}
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options) {
this.callbackHandler=callbackHandler;
String s1 = (String) options.get("url");
System.out.println(s1);
}
public boolean login() {
NameCallback nameCb = new NameCallback("user: ");
PasswordCallback passCb = new PasswordCallback("password: ", true);
Callback[] callbacks = new Callback[] {
nameCb, passCb};
try{
callbackHandler.handle(callbacks);
}catch(Exception e){
e.printStackTrace();
}
String username = nameCb.getName();
String password = new String(passCb.getPassword());
if (username.equals("songlipeng2003") && password.equals("2010525")) {
return true;
}
else {
return false;
}
}
public boolean logout() {
return false;
}
public boolean abort() {
return false;
}
public boolean commit() {
return false;
}
}
3.Hello.java
package test;
import javax.security.auth.login.*;
public class Test {
public static void main(String[] args) {
System.setProperty("javax.security.auth.login.config","./test.config");
ConsoleCallbackHandler handler=new ConsoleCallbackHandler();
try{
LoginContext lc=new LoginContext("hello",handler);
lc.login();
}catch(LoginException e){
e.printStackTrace();
}
}
}
4.test.config
hello {
test.RdbmsLoginModule required debug=true;
};
出现异常:
--------------------Configuration: <Default>--------------------
Exception in thread "main" java.lang.SecurityException: 无法定位登录配置
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:93)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at javax.security.auth.login.Configuration$3.run(Configuration.java:246)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:241)
at javax.security.auth.login.LoginContext$1.run(LoginContext.java:237)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.init(LoginContext.java:234)
at javax.security.auth.login.LoginContext.<init>(LoginContext.java:403)
at test.Test.main(Test.java:10)
Caused by: java.io.IOException: 无法定位登录配置
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:250)
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91)
... 14 more
这些文件都放在同一个文件夹下啊,路径应该没有问题。登录config文件也应该没有问题,改了好多次了啊。都是这个错误,我从IBM下了一个和这个差不多的例子,就是可以运行,但是不知道我错到了那里啊。
ibm的相关例子的网址:http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/rzaha/jaashllo.htm
...全文
相关推荐
jaas详细配置精讲
**编写JAAS配置文件**: JAAS配置通常位于`$JAVA_HOME/jre/lib/security/java.security`中,或在应用程序的类路径下。
JAAS in Web Applications
- **审计和日志记录**:记录身份验证和授权事件,以便于跟踪和分析安全问题。通过上述知识点,你可以了解如何在Web应用中利用JAAS来实现强大的安全功能。
JAAS基础教程
该示例中,关系数据库被用来保存用户的登录信息,通过JAAS的支持,我们能够轻松实现一个强大而灵活的身份验证系统。
JAAS简介及实例
这个文件告诉JAAS哪些模块应该被用来验证特定的主体(Subject)。3. **主体(Subject)**:在Java中,Subject代表了系统中的一个实体,可能是一个用户或者一个进程。
c++内存,堆和栈的区别
在C++中,内存分成4个区,他们分别是堆、栈、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由malloc分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个malloc就要对应一个free。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 来自C++的程...


