glassfish 的基本身份验证失败

2023-12-08

首先,我对这篇长文表示歉意。这是我之前问题的延续(7u21更新后弹出需要验证的窗口)关于这个问题,但我缩小了搜索范围。简而言之,自 Java 7u21 以来,我的 BASIC 身份验证似乎已被破坏。

通过 JNLP 文件启动的小程序根本无法稳定运行,并会弹出身份验证窗口。

设置

首先我设置了一个MySQL数据库具有用户表和组表。

  • 表:身份验证

enter image description here

  • 表:组

enter image description here

接下来我设置了一个jdbc领域在玻璃鱼中。请注意,数据库用户和数据库密码字段为空,因为我使用 JNDI(请参阅下文):

Glassfish 领域设置:

enter image description here

JNDI配置(如domain.xml文件所示):

<jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" wrap-jdbc-objects="false" res-type="javax.sql.DataSource" name="mysql_mit_rohhPool">
  <property name="URL" value="jdbc:mysql://localhost:3306/mit?zeroDateTimeBehavior=convertToNull"></property>
  <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  <property name="Password" value="****"></property>
  <property name="portNumber" value="3306"></property>
  <property name="databaseName" value="mit"></property>
  <property name="User" value="****"></property>
  <property name="serverName" value="localhost"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="mysql_mit_rohhPool" jndi-name="jdbc/DB_MIT"></jdbc-resource>

完成此操作后,我将默认领域更改为新创建的jdbc领域并检查了默认主体到角色映射:

enter image description here

TESTING

毕竟,为了进行测试,我在 Netbeans 中创建了一个简单的 WebService,它从数据库中获取一些国家/地区并配置了web.xml对于 BASIC 身份验证:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>service</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<security-constraint>
    <display-name>Basic Protection</display-name>
    <web-resource-collection>
        <web-resource-name>REST</web-resource-name>
        <description/>
        <url-pattern>/webresources/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description/>
        <role-name>dummy</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>jdbcRealm</realm-name>
</login-config>
<security-role>
    <description>Dummy</description>
    <role-name>dummy</role-name>
</security-role>

为了测试 Web 服务,我在 NetBeans 中右键单击它,然后单击测试 RESTful Web 服务。将打开一个新的 Internet Explorer 窗口并显示登录屏幕,我输入dummy用户和一切正常。

接下来,我创建一个简单的 JavaFX FXML 项目来获取国家/地区。我有一个班级(使用泽西岛),看起来像下面这样。这是由 Netbeans 7.3 生成的代码:

private WebResource webResource;
private Client client;
private static final String BASE_URI = "http://localhost:8080/myWS/webresources";

public CountriesClient() {
    com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
    client = Client.create(config);
    webResource = client.resource(BASE_URI).path("entities.countries");
}

public void close() {
    client.destroy();
}

public void setUsernamePassword(String username, String password) {
    client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(username, password));
}

public <T> T findAll_XML(Class<T> responseType) throws UniformInterfaceException {
    WebResource resource = webResource;
    return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}

在我的 FXML 控制器文件中,我将此方法链接到一个按钮:

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");

    CountriesClient c = new CountriesClient();
    c.setUsernamePassword("dummy", "****");
    String r = c.findAll_XML(String.class);
    System.out.println(r);
    c.close();
}

这就是我的项目的设置。现在,当我在 Netbeans 中测试它或通过 *.jar 文件启动它时,一切都按预期工作,并给出以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><countriess><countries><country>Belgium</country><id>1</id></countries><countries><country>Ireland</country><id>2</id></countries><countries><country>United Kingdom</country><id>3</id></countries><countries><country>Poland</country><id>4</id></countries></countriess>

然而,一旦我通过 *.jnlp 文件启动小程序,我就会收到这个恼人的弹出窗口,抱怨凭据:

enter image description here

java控制台记录了这一点:

network: Cache entry found [url: http://localhost:8080/myWS/webresources/entities.countries, version: null] prevalidated=false/0
cache: Adding MemoryCache entry: http://localhost:8080/myWS/webresources/entities.countries
cache: Resource http://localhost:8080/myWS/webresources/entities.countries has expired.
cache: Resource http://localhost:8080/myWS/webresources/entities.countries has cache control: no-cache.
network: Connecting http://localhost:8080/myWS/webresources/entities.countries with proxy=DIRECT
network: Connecting socket://localhost:8080 with proxy=DIRECT
network: Firewall authentication: site=localhost/127.0.0.1:8080, protocol=http, prompt=jdbcRealm, scheme=basic
network: ResponseCode for http://localhost:8080/myWS/webresources/entities.countries : 401
network: Encoding for http://localhost:8080/myWS/webresources/entities.countries : null
network: Connecting http://localhost:8080/myWS/webresources/entities.countries with proxy=DIRECT
basic: JNLP2ClassLoader.findClass: com.sun.jersey.core.header.InBoundHeaders: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jersey.core.util.StringKeyStringValueIgnoreCaseMultivaluedMap: try again ..
network: Downloading resource: http://localhost:8080/myWS/webresources/entities.countries
Content-Length: 322
Content-Encoding: null
network: Wrote URL http://localhost:8080/myWS/webresources/entities.countries to File C:\Users\stbrunee\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\6\4b456206-236d2196-temp
cache: MemoryCache replacing http://localhost:8080/myWS/webresources/entities.countries (refcnt=0). Was: URL: http://localhost:8080/myWS/webresources/entities.countries | C:\Users\stbrunee\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\6\4b456206-15cb0b99.idx Now: URL: http://localhost:8080/myWS/webresources/entities.countries | C:\Users\stbrunee\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\6\4b456206-236d2196.idx
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><countriess><countries><country>Belgium</country><id>1</id></countries><countries><country>Ireland</country><id>2</id></countries><countries><country>United Kingdom</country><id>3</id></countries><countries><country>Poland</country><id>4</id></countries></countriess>

在服务器端(glassfish 日志)

FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] hasUserDataPermission perm: ("javax.security.jacc.WebUserDataPermission" "/webresources/entities.countries" "GET")
FINE: [Web-Security] hasUserDataPermission isGranted: true
FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] Codesource with Web URL: file:/myWS/myWS
FINE: [Web-Security] Checking Web Permission with Principals : null
FINE: [Web-Security] Web Permission = ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")
FINEST: JACC Policy Provider: PolicyWrapper.implies, context (myWS/myWS)- result was(false) permission (("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET"))
FINE: [Web-Security] hasResource isGranted: false
FINE: [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")
FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] hasUserDataPermission perm: ("javax.security.jacc.WebUserDataPermission" "/webresources/entities.countries" "HEAD")
FINE: [Web-Security] hasUserDataPermission isGranted: true
FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] Codesource with Web URL: file:/myWS/myWS
FINE: [Web-Security] Checking Web Permission with Principals : null
FINE: [Web-Security] Web Permission = ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "HEAD")
FINEST: JACC Policy Provider: PolicyWrapper.implies, context (myWS/myWS)- result was(false) permission (("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "HEAD"))
FINE: [Web-Security] hasResource isGranted: false
FINE: [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "HEAD")
//NOW I PRESS CANCEL AT THE POPUP WINDOW CLIENT SIDE
FINE: [Web-Security] Setting Policy Context ID: old = null ctxID = myWS/myWS
FINE: [Web-Security] hasUserDataPermission perm: ("javax.security.jacc.WebUserDataPermission" "/webresources/entities.countries" "GET")
FINE: [Web-Security] hasUserDataPermission isGranted: true
FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] Codesource with Web URL: file:/myWS/myWS
FINE: [Web-Security] Checking Web Permission with Principals : null
FINE: [Web-Security] Web Permission = ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")
FINEST: JACC Policy Provider: PolicyWrapper.implies, context (myWS/myWS)- result was(false) permission (("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET"))
FINE: [Web-Security] hasResource isGranted: false
FINE: [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")
FINEST: Processing login with credentials of type: class com.sun.enterprise.security.auth.login.common.PasswordCredential
FINE: Logging in user [dummy] into realm: jdbcRealm using JAAS module: jdbcRealm
FINE: Login module initialized: class com.sun.enterprise.security.auth.login.JDBCLoginModule
FINEST: JDBC login succeeded for: dummy groups:[dummy]
FINE: JAAS login complete.
FINE: JAAS authentication committed.
FINE: Password login succeeded for : dummy
FINE: Set security context as user: dummy
FINE: [Web-Security] Policy Context ID was: myWS/myWS
FINE: [Web-Security] Codesource with Web URL: file:/myWS/myWS
FINE: [Web-Security] Checking Web Permission with Principals : dummy, dummy
FINE: [Web-Security] Web Permission = ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")
FINE: [Web-Security] hasResource isGranted: true
FINE: [Web-Security] hasResource perm: ("javax.security.jacc.WebResourcePermission" "/webresources/entities.countries" "GET")

有几件事我实在不明白:

  • 在客户端,我看到 401 响应代码,这意味着未授权。如果我使用与测试 Web 服务完全相同的凭据,怎么会出现这种情况?
  • 在客户端,如果我在身份验证弹出窗口上按“取消”,如果用户未经过正确身份验证,为什么我仍然会收到请求中的 XML 数据?
  • 在服务器端,仍然正在发生身份验证过程。这是否与它是用 Java 编码有关?但同样,如果身份验证过程确实成功,为什么身份验证弹出窗口会显示在客户端?

您遇到的症状的原因是 Oracle 有在 Web Start 中使用 JDK7 默认启用 HTTP 响应缓存:

默认启用缓存:缓存应用程序的网络内容 现在默认启用在 Web Start 模式下运行的代码。这允许 应用程序提高了小程序执行的性能和一致性 模式。为了确保使用最新的内容副本,应用程序 可以使用URLConnection.setUseCaches(false)或请求头Cache-Control values no-cache/no-store.

所以我所做的是,在创建 Jersey 客户端后设置此标头:

Client client = Client.create();
client.addFilter( new HTTPBasicAuthFilter( userId, password ) );
client.addFilter( new ClientFilter() {

    @Override
    public ClientResponse handle( ClientRequest cr )
       throws ClientHandlerException {
           List<Object> cacheControlRequestValues = new ArrayList<Object>();
           cacheControlRequestValues.add( "no-cache" );
           cacheControlRequestValues.add( "no-store" );
           cr.getHeaders().put( HttpHeaders.CACHE_CONTROL, cacheControlRequestValues );
           return getNext().handle( cr );
    }
}

现在,如果上述规范正确,并且 Web Start 的实现将遵循HTTP/1.1 参考,其中指出

no-store 指令的目的是防止无意的 释放或保留敏感信息(例如,在备份时) 磁带)。 no-store 指令适用于整个消息,并且可以 在响应或请求中发送。如果在请求中发送,则 缓存不得存储此请求或任何响应的任何部分 到它。

我们会没事的 - 网络嗅探器证明客户端正确设置了 Cache-Control 标头。泽西岛的 ContainerResponseFilter 还向我展示了request设置正确。这response另一方面没有设置 Cache-Control 标头。根据规范,应该没有关系,但实际上 Web Start 一直在缓存响应!

因此,我编写了一个 ContainerResponseFilter,它将 Cache-Control 标头从请求复制到响应:

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

import javax.ws.rs.core.HttpHeaders;
import java.util.ArrayList;
import java.util.List;

public class CacheControlCopyFilter
    implements ContainerResponseFilter 

    @Override
    public ContainerResponse filter( ContainerRequest containerRequest, ContainerResponse containerResponse ) {
        if ( containerRequest.getRequestHeader( HttpHeaders.CACHE_CONTROL ) != null ) {
            List<Object> responseCacheControlValues = new ArrayList<Object>( containerRequest.getRequestHeader( HttpHeaders.CACHE_CONTROL ).size() );
            for ( String value : containerRequest.getRequestHeader( HttpHeaders.CACHE_CONTROL ) ) {
                responseCacheControlValues.add( value );
            }
            containerResponse.getHttpHeaders().put( HttpHeaders.CACHE_CONTROL, responseCacheControlValues );
        }
        return containerResponse;
    }

}

并在web.xml

<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>my.package.CacheControlCopyFilter</param-value>
</init-param>

然后你必须删除你的 Java 客户端缓存:

"javaws -viewer" -> General
                 -> Settings...
                 -> Delete Files...
                 -> Select all three check boxes
                 -> OK

瞧,不再有烦人的身份验证弹出窗口了:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

glassfish 的基本身份验证失败 的相关文章

  • 如何从内容处置中读取编码的文件名

    我得到的内容处置标头值如下 附件 文件名 UTF 8 album jpeg 如何从中提取文件名 album jpeg 在查看该值时 它具有编码格式值 使用Spring的内容配置 https docs spring io spring doc
  • 如何使用 Java 本机接口将字节数组传递到以 char* 作为参数的 C 函数中?

    所以我需要使用JNI从java调用C函数 当传入不同的数据类型 创建本机变量 头文件 共享库等等 时 我已经能够成功地做到这一点 但无法让它与字节数组一起使用 这是我的 C 函数 include
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • Java 将 String[] 转换为 int[]

    我有一个 String 其中每个元素都可以转换为整数 将其转换为 int 的最佳方法是什么 int StringArrayToIntArray String s public static int StringArrToIntArr Str
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • 如何跨工作区保存 E​​clipse 启动配置文件?

    当我复制 Eclipse 项目目录时 它包含 classpath 和 project 文件 这样当我将同一目录带到另一个 Eclipse 实例时 我不必设置我的构建路径等 假设所有资源都包含在在项目中 而不是外部 但是 此过程不会导致启动配
  • 为什么ArrayList没有getSize()而不是size()?

    我在一些 JSP 页面中大量使用 ArrayList 我想像这样访问 ArrayList myArrayList size 但由于对象必须符合 JavaBean 标准 其中myArrayList getMyPropertyName is m
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 如何删除 Spring 的 RestTemplate 添加的某些 HTTP 标头?

    我在远程服务方面遇到问题 我无法控制对使用 Spring 的 RestTemplate 发送的请求进行 HTTP 400 响应 使用发送的请求curl但被接受了 所以我将它们与通过 RestTemplate 发送的内容进行了比较 特别是 S
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • 是否可以从外部闪存驱动器运行 java (jdk-windows)、Eclipse (indigo) 和 Android-sdk 进行 Android 应用程序开发

    我想知道我们是否可以通过在外部闪存驱动器上保存所需的软件来在我们使用的任何计算机上开发我们的android应用程序 我的意思是在闪存驱动器上安装java eclipse和android sdk 所以最后我们可以将闪存带到任何地方计算机并在任
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • 错误:使用 Microsoft WebService.dll 通过 Delphi7 规范化 XML

    我正在使用 Delphi7 修改旧项目以添加使用证书和签名 经过一番搜索后我发现XML 规范化函数 https learn microsoft com en us previous versions dd815358 v vs 85 但我无
  • 如何在android中使用Room Persistence ORM工具实现created_at和updated_at列

    我该如何实施created at and updated at在Android中使用Room Persistence ORM工具的列 可以在创建或更新表中的行时自动更新时间戳 我研究了很多网站 但仍然没有找到任何可以处理的结果middlew
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get

随机推荐

  • 让 vibrate() 在没有 PhoneGap 的浏览器中工作

    有谁知道如何让 navigator vibrate 之类的东西直接在网站的浏览器中工作 不使用 PhoneGap 和 webview 没有找到任何命令http www w3 org TR vibration 似乎有效 我能找到的只是对使用
  • 使用 jQuery 获取选定复选框的值

    我想循环遍历复选框组 locationthemes 并使用所有选定的值构建一个字符串 因此 当选择复选框 2 和 4 时 结果将是 3 8
  • 如何在后台首次运行/调用 CtrlP - VIM

    打电话时CtrlP第一次它导致构建缓存相当延迟 有没有办法在后台运行它 这样我就可以继续在 vim 中做事情 如果您需要加快索引速度CtrlP 您可以使用aggrep 文件 从索引中排除某些文件夹和文件 并设置缓存位置 为此 请将这些行放入
  • WordPress 管理员 - 需要自定义元检查

    我在 WordPress 管理中添加自定义用户元 并且我希望我的两个自定义字段是必需的 但是如何显示错误并告诉 WordPress 在出现错误时不更新配置文件 add action personal options update sweet
  • 为什么annotation_raster不起作用?

    在文档中 有一个示例显示了使用annotation raster如下 ggplot aes x mpg y wt data mtcars annotation raster red Inf Inf Inf Inf geom point 这工
  • 将 ASP.NET MVC Razor @helper 函数转换为帮助器类的方法

    考虑以下 ASP NET MVC razor 视图片段 它定义了一个帮助器 helper FieldFor
  • 当用户连续键入时,每 500 毫秒执行一次函数不超过一次

    我正在尝试实现类似自动完成的功能 因此我在以下时间运行该函数oninput事件发生 因为我正在发出获取请求 而不是在每次更改时运行它 所以我希望在 也许 500 毫秒内运行它不超过一次 有没有办法做到这一点
  • 多次调用 window.open() 第一次后失败

    我有一个脚本可以循环访问多个网址并在新选项卡中打开它们 以前可以用 但现在只能打开第一个 甚至有一个 w3schools 测试编辑器据说可以打开多个窗口 但在第一个窗口之后它也失败了 https www w3schools com jsre
  • 友好地获取ffmpeg信息

    每次我尝试使用 ffmpeg 获取有关我的视频文件的一些信息时 它都会吐出很多无用的信息和好的信息 我在用着ffmpeg i name of the video mpg 有没有可能以友好的方式得到它 我的意思是 JSON 会很棒 甚至丑陋的
  • PWA 关闭时发送通知

    我制作了一个 PWA 待办事项列表应用程序 链接到应用程序 使用角度 我现在计划添加通知 以便在应用程序关闭时可以到达用户 由于它是一个离线工作的 PWA 我不能依赖推送通知 提前致谢 你可以利用Web 定期后台同步 API您也可以离线运行
  • 使用 Android 进行录制时显示不断更新的双精度(频率)

    我正在构建一个 Android 应用程序 它使用 FFT 算法显示持续音符的频率 我正在使用 Jtransform 方法 目前我的问题是我无法在屏幕上显示频率 以下代码是 fft 频率计算和 AsynchTask 应在文本框中显示频率 im
  • Python 列表到 XML,反之亦然

    我编写了一些将 python 列表转换为 XML 元素的 python 代码 它用于与 LabVIEW 交互 因此采用了奇怪的 XML 数组格式 无论如何 这是代码 def pack data create the result eleme
  • 无法转换日期 - LocalDate 减去一天

    我对日期及其从 Date 到 LocalDate 的传递有疑问 主要错误在于年份为 1700 年的日期 我尝试过两个不同的日期 每当年份是 1700 年时 我就会少一天 Date dto Instant inst dto toInstant
  • android 如何限制ListView中列表项的显示和按钮显示更多

    我正在从数据库获取数据并在 ListView 中使用自定义列表适配器进行显示 我只需要在 ListView 中显示 10 个项目 在第 10 项之后 会显示一个带有文本 显示更多 的按钮 当单击此按钮时 会在列表视图中显示数据库中的更多 1
  • raw 无法解析或不是字段

    我正在我的应用程序中构建 MP3 播放器 但收到一条错误消息 指出 raw 无法解析或不是字段 mMediaPlayer MediaPlayer create this R raw test cbr 我不确定 R raw test cbr
  • javascript 闭包无法正常工作

    看第一段代码 var count 0 function addLinks var count 0 this count var is increasing for var i 0 link i lt 5 i link document cr
  • 如何使用 Microsoft Graph 更新 SharePoint 中的查找字段和用户字段?

    我正在寻找一种如何使用 Microsoft graph 更新查找字段和用户字段的方法 我可以读取该项目 但即使我输入了正确的 ID 值 也找不到创建或更新此类字段的方法 现在支持通过 Microsoft Graph API 更新查找字段 假
  • 带有循环调试打印的 ansible 寄存器不起作用

    我有一个简单的剧本 应该显示我的服务状态 我想查看机器的输出以查看状态是否处于活动状态 所以我使用了调试打印 如下所示 name name of services shell systemctl status item with items
  • Flutter:更新列表中的特定索引(Firestore)

    究竟如何根据索引更新列表中的特定值 例如 在以下列表中 0 first name name0 last name lastName0 1 first name name1 last name lastName1 如何仅更新 lastName
  • glassfish 的基本身份验证失败

    首先 我对这篇长文表示歉意 这是我之前问题的延续 7u21更新后弹出需要验证的窗口 关于这个问题 但我缩小了搜索范围 简而言之 自 Java 7u21 以来 我的 BASIC 身份验证似乎已被破坏 通过 JNLP 文件启动的小程序根本无法稳