相关疑难解决方法(0)

有没有办法让java中的SecurityManager有选择地授予ReflectPermission("suppressAccessChecks")?

有没有办法让Java中的SecurityManager根据调用setAccessible()的详细信息有选择地授予ReflectPermission("suppressAccessChecks")?我认为没有办法做到这一点.

对于某些沙盒代码,它将非常有用(例如运行各种动态JVM语言)以允许调用setAccessible()反射API,但当在发起的类的方法/字段上调用setAccessible()时在沙盒代码中.

除非选择性授予ReflectPermission("suppressAccessChecks"),否则是否有任何其他建议?在所有情况下,如果SecurityManager.checkMemberAccess()具有足够的限制性,那么授予它是否安全?

java reflection securitymanager

8
推荐指数
2
解决办法
4534
查看次数

Java - 在这种情况下如何正确规避非法访问异常

我遇到了这个奇怪的问题,即使(我认为)我将所有内容设置为可以正确访问,但我仍然收到 IllegalAccessException。

java.lang.IllegalAccessException:类 com.sasha.eventsys.SimpleEventManager 无法使用修饰符“private”访问类 com.sasha.proxy.discord.DiscordMain 的成员

public void invokeEvent(SimpleEvent e){
    registeredMethods.forEach(method -> {
        if (method.getParameterTypes()[0] == e.getClass()){
            try {
                Class clasz = method.getDeclaringClass();
                for (Field field : clasz.getFields()) {
                    field.setAccessible(true);
                }
                for (Method meth : clasz.getMethods()) {
                    meth.setAccessible(true);
                }
                for (Constructor<?> constructor : clasz.getConstructors()) {
                    constructor.setAccessible(true);
                }
                method.setAccessible(true);
                method.invoke(clasz.newInstance(), e);
            }
            catch (Exception ex){
                System.out.println("FATAL EXCEPTION DURING " + e.getClass().getName() + "'s EXECUTION");
                ex.printStackTrace();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是调用该方法的代码。理论上,那些 for 循环应该将所有内容设置为可访问,对吧?

@SimpleEventHandler
public void onMcMsgRecieved(MinecraftMessageRecievedEvent e){
    if(Config.doDiscord) {
        DiscordMain.theChannel …
Run Code Online (Sandbox Code Playgroud)

java reflection

3
推荐指数
1
解决办法
2412
查看次数

spring如何实现这项技术?

今天,我了解到我们可以使用spring的@AutoWired注释来完成自动注入,@ AutoWired可以在很多条件下使用,比如

@AutoWired
public void setInstrument(Instrument instrument){
  this.instrument = instrument;
}
Run Code Online (Sandbox Code Playgroud)

但我们也可以把这个@AutoWired放在私人领域

@AutoWired
private Instrument instrument;
Run Code Online (Sandbox Code Playgroud)

我想知道,春天如何将一个对象注入私有领域,我知道我们可以使用java的反射来获取一些元数据,当我使用反射在私有字段上设置一个对象时,这里出现了一个问题,以下是堆栈跟踪

 java.lang.IllegalAccessException: Class com.wire.with.annotation.Main can not access a member of class com.wire.with.annotation.Performer with modifiers "private"
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?为什么spring可以将一个对象注入一个没有setter方法的私有字段.非常感谢

java spring

1
推荐指数
1
解决办法
191
查看次数

如何保护字符串免受黑客攻击

有人可以告诉我应该在String类API中进行更改(我们不能这样做),以便下面的程序应该打印"地球"吗?或者
我们如何停止打印"太阳"?如何阻止黑客攻击?

public class StringAPI {
    public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
        Field value = String.class.getDeclaredField("value");
        value.setAccessible(true);
        value.set("Earth", "Sun".toCharArray());
        System.out.println("Earth"); // prints "Sun"
    }
}
Run Code Online (Sandbox Code Playgroud)

java string reflection immutability

-1
推荐指数
1
解决办法
761
查看次数