小编use*_*403的帖子

使用FCM从服务器发送推送通知

最近我问了一个关于使用GCM 发送推送通知的问题:向Android发送推送通知.现在有了FCM,我想知道它与服务器端开发有多么不同.明智的编码,它们是一样的吗?在哪里可以找到显示从服务器向Android设备发送推送通知的示例FCM代码?

我是否需要下载任何JAR库以使用Java代码向FCM发送通知?向Android发送推送通知中的示例代码显示使用GCM发送推送通知,并且需要服务器端GCM JAR文件.

但是,另一个例子在https://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-push-a-notification-to -the-client-app显示使用GCM发送推送通知,并且不需要服务器端GCM JAR文件,因为它只是通过HTTP连接发送.FCM可以使用相同的代码吗?使用的网址是" https://android.googleapis.com/gcm/send ".什么是FCM的等效URL?

提前致谢.

firebase google-cloud-messaging firebase-cloud-messaging

32
推荐指数
2
解决办法
7万
查看次数

加密(模式和填充)

我的任务是编写一个涉及加密的小型Java控制台应用程序.我不熟悉加密,所以我必须先做一些阅读.到目前为止,给出的高级要求是AES-256应该用于生成一次性密钥来加密文件.

之后,应使用收件人的公钥(RSA-2048)来加密该AES-256一次性密钥.然后,加密文件和加密的一次性AES-256密钥将被压缩并发送给收件人.

根据我对读取加密和解密的理解,除了算法(RSA,AES等)之外,还有称为模式和填充的东西.例如,以下代码将RSA指定为算法,ECB模式和PKCS1Padding.

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)

在加密和解密中必须使用相同的算法,模式和填充.因此,我可以向用户询问他们想要的模式和填充是否合理?

我注意到Cipher cipher = Cipher.getInstance("RSA")似乎使用了ECB的默认模式和PKCS1Padding的填充,因此这行代码与上面相同.那么可以假设ECB模式和PKCS1Padding模式将默认用于RSA-2048吗?

java encryption cryptography public-key-encryption

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

向Android发送推送通知

我目前正在开发在服务器上运行WebLogic的Java Web服务.这些Web服务由移动应用程序调用,该应用程序由另一个团队开发.我需要向移动应用程序发送推送通知.我目前的开发并不需要我进行任何移动开发,因为我只进行服务器端开发.我也没有移动开发方面的经验.如何开发推送通知到两个Android设备?

谢谢.

android push-notification android-notifications google-cloud-messaging

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

在哪里下载IIS 8的Web Farm Framework和外部缓存?

我有一个Windows Server 2012 R2标准版(基于x64的处理器),它有IIS 8.我需要在其上配置反向代理,它缺少URL Rewrite模块.根据我的阅读,URL Rewrite需要应用程序请求路由(ARR)模块,该模块本身也需要Web Farm Framework模块和外部缓存模块.

对于URL Rewrite,我可以从https://www.iis.net/downloads/microsoft/url-rewrite下载

对于ARR,我可以从https://www.iis.net/downloads/microsoft/application-request-routing下载

在哪里可以下载IIS 8的Web Farm Framework和外部缓存模块?我已经搜索过,到目前为止我发现的内容仅适用于IIS 7.5.

iis web-farm-framework url-rewrite-module iis-8

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

无法打印 Base64 编码的字符串

有人可以向我解释为什么下面的第二个 println 语句没有打印任何内容吗?即使我使用 encodeToString() 方法而不是 encode() 方法,我仍然无法打印 Base64 编码的字符串。编码的字符串不为空,因为我可以使用它的 length() 方法进行验证。我尝试了一个不同的文件,一个二进制文件,但问题仍然存在。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;

public class Test {

    public static void main(String... args) {
        try {
            byte[] content = Files.readAllBytes(Paths.get("D:\\config.properties"));
            System.out.println(content.length); // correctly prints the length
            byte[] encoded = Base64.getEncoder().encode(content);
            System.out.println(new String(encoded)); // prints nothing
            content = Base64.getDecoder().decode(encoded);
            System.out.println(new String(content)); // prints original content
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑

这个问题只在我在 Eclipse 中运行程序时存在。当我从命令提示符运行它时,可以打印出 Base64 编码的字符串。

java eclipse base64

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

拦截JAX-RS Web服务请求以添加JSON字段

我有一个JAX-RS Web服务,它返回一个获取JSON请求参数(映射到Parameter对象),如下所示(它在WebLogic 12.2.1中运行).是否可以编写拦截器或过滤器,这样当调用Web服务时,它将在JSON请求消息中添加一个额外的字段,以便下面的方法将在requestParameters中获得额外的字段?

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("LogIn")
public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) {...}
Run Code Online (Sandbox Code Playgroud)

谢谢!

json web-services jax-rs weblogic12c

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

Java易失和/或同步

我有一个静态方法,它应该根据当前时间戳生成一个唯一的ID,如下面的代码所示.为了确保新生成的ID与先前生成的ID不同(由于非常快的计算机使得毫秒不会改变),我放入一个循环来比较新生成的ID与先前生成的ID.如果它们相同,它将生成另一个ID.

public class Util {

    protected static String uniqueID;

    public static String generateUniqueID() {
        SimpleDateFormat timstampFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        do {
            String timestamp = timstampFormat.format(new Date());
            if (!timestamp.equals(uniqueID)) {
                uniqueID = timestamp;
                return uniqueID;
            }
        } while (true);
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码在多个线程调用方法时起作用.

如果我只将volatile关键字放入uniqueID变量,那还不够好吗?我还需要同步块吗?

如果有一个synchronized块但没有volatile关键字呢?

提前致谢.

添加:

如果我更改为以下代码,仍然需要volatile关键字吗?

public class Util {

    private static volatile String uniqueID;

    public static synchronized String generateUniqueID() {
        uniqueID = UUID.randomUUID().toString();
        return uniqueID;
    }

}
Run Code Online (Sandbox Code Playgroud)

java concurrency volatile synchronized

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

JDBC PrepareStatement参数不适用于CREATE,DROP,ALTER

我需要使用JDBC来创建新的Oracle用户.用户通过GUI提供新用户的用户名和密码.以下代码工作正常(我也可以使用Statement而不是PreparedStatement).

PreparedStatement preparedStatement = connection.prepareStatement("create user " + username + " identified by " + password);
preparedStatement.execute();
Run Code Online (Sandbox Code Playgroud)

但是,由于用户名和密码是由用户提供的,因此它们可能包含空格,半列,引号等特殊字符,这可能使上述语句无效.我不希望我的代码对用户名和密码进行验证,并将其留给Oracle进行验证.因此,我想到在预准备语句中使用参数:

PreparedStatement preparedStatement = connection.prepareStatement("create user ? identified by ?");
preparedStatement.setString(1, userName);
preparedStatement.setString(2, password);
preparedStatement.execute();
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.当我提供有效的用户名和密码时,我将收到"ORA-01935:缺少用户名或角色名".似乎参数不适用于CREATE,DROP,ALTER语句.如何解决我的问题?提前致谢.

java oracle jdbc ojdbc

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

Log4j2在WebLogic 12.2.1中不起作用

我试图在运行于WebLogic 12.2.1的Web服务中添加log4j日志记录,但是以某种方式,日志记录无法正常工作。

这是我的WAR文件的WEB-INF \ classes中的log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Properties>
        <Property name="log-path">E:/MLM/MyDomain/servers/MyAppSrv01/logs</Property>
    </Properties>
    <Appender type="File" name="File" fileName="${log-path}/Services.log" filePattern="${log-path}/Services-%d{yyyy-MM-dd}.log">
        <Layout type="PatternLayout">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Layout>
    </Appender>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

这是我的Web服务代码的一部分:

@Path("TestWS")
@Consumes("text/plain")
@Produces("text/plain")
public class TestWS {

    static private Logger logger = LogManager.getLogger();

    public TestWS() {}

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("webservicemethod1")
    public String webservicemethod1(@Context HttpServletRequest request) {
        logger.error("In webservicemethod1");
        ....
    }

}
Run Code Online (Sandbox Code Playgroud)

在我的WAR文件的WEB-INF \ lib \中,我有:

log4j-core-2.5.jar
log4j-api-2.5.jar
Run Code Online (Sandbox Code Playgroud)

我可以使用客户端程序成功调用Web服务。但是我根本看不到日志文件被创建。可能是什么问题呢?

提前致谢。

logging log4j weblogic weblogic12c log4j2

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

Collectors.toList() 返回的收集器类型

我对 Collectors.toList() 和 Collectors.toSet() 静态方法很困惑。这两种方法不接受任何参数。那么他们怎么知道要返回什么类型的 Collector 呢?

例如,如果我们有这一行:

Collectors.toList();
Run Code Online (Sandbox Code Playgroud)

返回的收集器是Collector<Object,?,List<Object>>

如果我们有这一行:

Collector<Integer,?,List<Integer>> c = Collectors.toList();
Run Code Online (Sandbox Code Playgroud)

然后 Collectors.toList() 将返回一个Collector<Integer,?,List<Integer>>. 在不接受任何输入参数的情况下, toList() 方法如何知道它需要返回一个Collector<Integer,?,List<Integer>>?

也许如何编写 toList() 的示例代码对我的理解会有所帮助。

提前致谢。

java java-8

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

JavaFX位置对话框和舞台位于屏幕中央

以下代码演示了对话框的居中以及舞台在屏幕中心的位置。应该首先显示该对话框,以便用户输入登录凭据。成功登录后,将显示主窗口(阶段)。我从该网站找到了以对话框和舞台为中心的解决方案,但这似乎并不理想。对于对话框和阶段,必须先显示它们,然后才能计算坐标,然后将其放置在中心。这意味着显示对话框和主窗口后,它们会移到中心。有没有更好的办法?理想情况下,在显示它们之前,应将它们放置在中间。

import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.Window;

public class Demo extends Application {

    private Stage primaryStage;
    private Dialog<String> dialog;
    private Button createUserButton = new Button("Create User");

    @Override
    public void start(Stage primaryStage) throws …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-8

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