使用Spring Security XML配置,您可以定义多个HTTP元素,以便为应用程序的不同部分指定不同的访问规则.8.6高级命名空间配置中给出的示例定义了应用程序的单独的有状态和无状态部分,前者使用会话和表单登录,后者不使用会话和BASIC身份验证:
<!-- Stateless RESTful service using Basic authentication -->
<http pattern="/restful/**" create-session="stateless">
<intercept-url pattern='/**' access='ROLE_REMOTE' />
<http-basic />
</http>
<!-- Empty filter chain for the login page -->
<http pattern="/login.htm*" security="none"/>
<!-- Additional filter chain for normal users, matching all other requests -->
<http>
<intercept-url pattern='/**' access='ROLE_USER' />
<form-login login-page='/login.htm' default-target-url="/home.htm"/>
<logout />
</http>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何使用Java Config做同样的事情.重要的是我禁用会话并为我的Web服务使用不同的入口点.现在我有以下内容:
@Override
public void configure(WebSecurity security)
{
security.ignoring().antMatchers("/resource/**", "/favicon.ico");
}
@Override
protected void configure(HttpSecurity security) throws Exception
{
security
.authorizeRequests()
.anyRequest().authenticated() …
Run Code Online (Sandbox Code Playgroud) 我有以下类,它使用构造函数注入:
public class Service : IService
{
public Service(IRepository repository, IProvider provider) { ... }
}
Run Code Online (Sandbox Code Playgroud)
对于这个类中的大多数方法,我只是为IRepository
和创建Moq模拟IProvider
和构造Service
.但是,类中有一个方法可以在同一个类中调用其他几个方法.为了测试这个方法,我想测试该方法是否正确地调用这些方法并正确处理它们的返回值,而不是一起测试所有这些方法.
这样做的最好方法是嘲笑Service
.我之前没有问题就用Moq模拟了具体的类.我甚至嘲笑了具有Moq构造函数参数的具体类,没有问题.但是,这是我第一次需要将模拟参数传递给模拟对象的构造函数.当然,我试着这样做:
var repository = new Mock<IRepository>();
var provider = new Mock<IProvider>();
var service = new Mock<Service>(repository.Object, provider.Object);
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.相反,我收到以下错误:
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: My.Namespace.Service.
Could not find a constructor that would match given arguments:
Castle.Proxies.IRepository
Castle.Proxies.IProvider
Run Code Online (Sandbox Code Playgroud)
如果Service
构造函数接受像int
s和string
s 这样的简单参数,那么这种方法很好,但是如果它接受我正在嘲笑的接口则不行.你怎么做到这一点?
我需要使用Maven从Javadoc中排除特定的源文件(不仅仅是包).<excludePackageNames>设置对我不起作用:它只允许您排除某些包.有一个<sourceFileExcludes>设置,基本上没有使用示例的文档.它只是说:
"sourceFileExcludes:排除源文件上的过滤器.如果指定子包或子包排除,则会忽略这些过滤器."
所以,基本上,我需要忽略所有以Mock开头的Java文件,以及两个包中的所有Java文件.如果我指定excludePackageNames,则会忽略sourceFileExcludes,因此我无法将它们组合在一起.所以我尝试了这个:
<sourceFileExcludes>
<exclude>net/my/packagename/mock</exclude>
<exclude>net/my/packagename/samples</exclude>
<exclude>**/Mock*.java</exclude>
</sourceFileExcludes>
Run Code Online (Sandbox Code Playgroud)
但它没有用.没有排除任何目标文件.
有谁知道如何使用sourceFileExcludes?
按照使用页面(http://maven.apache.org/plugins/maven-antrun-plugin/usage.html)上的说明和其他Stackoverflow问题,我一直在尝试从我的Maven构建中运行Ant任务.我已经简化了我要做什么,简单回应"你好,Maven",但我没有得到任何东西.
我正在执行Maven:
mvn package
Run Code Online (Sandbox Code Playgroud)
我希望这个特定的任务在打包之前运行("prepare-package"),所以我先尝试了这个阶段,但是当这个阶段没有用时,我试着让我的阶段只是"打包".
这是我试过的一个插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>id.package.ant</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="Hello, maven"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的另一个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>id.package.ant</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo message="Hello, maven"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我也尝试了没有<id>的这些.
我没有错误,根本没有输出.即使我执行Maven -debug,输出中也没有出现"echo"字样,输出中出现"antrun"字样,输出中出现"hello"字样.
这就像插件配置甚至不存在.
我使用的是 MySQL 5.7.24 和 PHP 7.2.10。MySQL 配置了 SSL。我有一个my_user
密码的用户abc123
。我尝试使用两个身份验证插件进行配置:
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH sha256_password BY 'abc123';
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH mysql_native_password BY 'abc123';
Run Code Online (Sandbox Code Playgroud)
从我的 PHP 服务器,我可以使用mysql
命令行客户端成功连接,而无需指定主机、用户和密码以外的任何内容。但是,在 PHP 中,我只能在使用mysql_native_password
. 使用sha256_password
.
以下 PHP 代码适用于mysql_native_password
:
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$con = $mysqli->real_connect('192.168.192.100', 'my_user', 'abc123', 'my_db',
3306, null, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
var_dump($mysqli->query('SELECT 1;'));
Run Code Online (Sandbox Code Playgroud)
但是,当我使用 时sha256_password
,出现错误“用户'my_user'@'192.168.192.150'(使用密码:YES)拒绝访问”。我已经尝试交替添加以下两个语句(之前real_connect
)但没有成功(但是,我要补充的是,我不需要其中任何一个,因为我可以在不指定这些选项的情况下连接命令行客户端*)。
$mysqli->ssl_set(null, null, 'ca.pem', null, null);
$mysqli->ssl_set('client-key.pem', 'client-cert.pem', 'ca.pem', null, null);
Run Code Online (Sandbox Code Playgroud)
那么在 …
我们将Microsoft ASP.NET MVC OData WebAPI用于我们的Web服务.由于围绕层次结构ID的某些数据架构问题(这些问题超出了此对话的范围),我们的一些GET操作必须使用ODataQueryOptions并手动操作表达式以添加其他限制.我们这样做(删除错误处理代码并调用内联的其他方法)
public IQueryable<Person> Get(ODataQueryOptions<Person> oDataQueryOptions)
{
IQueryable<Person> result;
IQueryable<Person> dataSet = context.Persons;
var tempQuery = oDataQueryOptions.ApplyTo(dataSet).Cast<Person>();
var modifier = new HierarchyNodeExpressionVisitor(GetDescendantsOfNode, GetAncestorsOfNode);
var expression = modifier.ModifyHierarchyNodeExpression(tempQuery.Expression);
result = context.Persons.Provider.CreateQuery<Person>(expression);
return result;
}
Run Code Online (Sandbox Code Playgroud)
这已经有一段时间了,但是我们一直急切地等待选择和扩展,以便我们能够更好地控制从服务中获得的数据.星期一我们将开发环境更新为WebApi OData 5.0.0-rc1并进行了选择和扩展工作,但是我们不能将它用于使用ODataQueryOptions的这些服务.我们只能用它来对付我们的其他服务.如果我们使用$select
和/或查询上面的代码$expand
,我们会收到以下错误:
"message": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.",
"type": "System.InvalidOperationException",
"stacktrace": "",
"internalexception":
{
"message": "Unable to cast the type 'System.Web.Http.OData.Query.Expressions.SelectAllAndExpand`1' to type 'OurCompany.Domains.Data.Models.Person'. LINQ to Entities only supports casting …
Run Code Online (Sandbox Code Playgroud) .NET框架中的许多类(特别是在socket/network类中,我正在查看)使用System.Net.GlobalLog(内部类)来记录某处的跟踪消息.您可以在SslState类中查看诸如GlobalLog.Assert和GlobalLog.Print之类的示例用法:
这与System.Net.Logging(也是内部)类不同,它的使用也可以在整个套接字/网络类中找到.
对于System.Net.Logging,我知道我可以在App.Config中使用<system.diagnostics>配置块,如果配置正确,将导致System.Net.Logging消息被记录.但是,这似乎不会影响System.Net.GlobalLog.
搜索了大约一个小时后,我似乎无法找到有关查找System.Net.GlobalLog输出的任何信息.有谁知道如何定位/查看/控制此输出?
我在Spring Framework应用程序中使用Hibernate作为JPA提供程序(我使用它EntityManagerFactory
而不是它SessionFactory
).我设法让Spring Framework的加载时间编织支持工作,所以我已经超越了这个障碍.
我需要在实体上启用延迟加载byte[]
和@ManyToOne
属性.我理解如何使用Hibernate的ant任务在构建时检测(编织)我的实体,但是我想在运行时检测我的实体(加载时间编织).我已经看到过几个谷歌搜索结果的引用,但没有启用它的实际说明.我需要设置什么属性来指示Hibernate它可以在运行时检测我的实体?
spring hibernate jpa hibernate-entitymanager load-time-weaving
我正在使用MySQL全局事务ID(GTID)测试一些工作,并且我很难获得最近的会话GTID.我启用了GTID(全局gtid_mode
设置为ON_PERMISSIVE
).根据该文件为gtid_owned
:
此只读变量包含一个列表,其内容取决于其范围.当与会话范围一起使用时,该列表包含此客户端拥有的所有GTID; ...
所以,在提交事务之后,我希望这个会话变量包含GTID; 但无论我做什么,它总是空着的.但是,gtid_executed
每次我提交事务时全局都会发生变化,因此我知道GTID正在运行.
这是一个演示此问题的会话:
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> START TRANSACTION;
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> INSERT INTO ........
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> COMMIT;
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-5 …
Run Code Online (Sandbox Code Playgroud) 使用以下方法创建新式C类的实例:
Run Code Online (Sandbox Code Playgroud)obj = C.__new__(C, *args)
为了利用这一点,我创建了一个没有实例属性或方法的单例:
class ZeroResultSentinel(object):
instance = None
def __new__(cls, *args):
if not cls.instance:
cls.instance = super(ZeroResultSentinel, cls).__new__(cls, *args)
return cls.instance
Run Code Online (Sandbox Code Playgroud)
(此类用于缓存层,以区分缓存中的无结果结果.)
单例工作得很好(每次调用ZeroResultSentinel()
结果都在内存中的相同实例中,并ZeroResultSentinel() == ZeroResultSentinel()
进行求值True
).我可以毫无错误地挑选和解开实例.但是,当我取消它时,我会得到一个不同的实例.所以我在其中放置了一个断点__new__
.我每次打电话都会打破断点ZeroResultSentinel()
,但是当我打开腌渍时,我没有打破断点ZeroResultSentinel
.这与文档直接矛盾.我做错了什么,或者文档不正确?
我有一个Python项目,有一个requirements.txt
项目pip install
可供使用.我在PyCharm开了那个项目.(旁注:在Git集成方面,PyCharm使用许多与IntelliJ相同的引擎,所以我也标记了这一点).
在打开Python文件时,正如预期的那样,PyCharm告诉我,"不满足包装要求." 我点击"安装要求",过了一会儿就会出现一些错误.所有错误都与私有 GitHub存储库有关(在requirements.txt
"git + ssh://git@github.com ..."中).所有错误都是一样的:
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
我可以pip install
毫无问题地从命令行运行,因此问题不在于requirements.txt.问题似乎是PyCharm没有使用我的GitHub SSH密钥(它从未问过我的SSH密钥密码).该PyCharm文档说,以确保在存在于您的公钥和私钥$HOME/.ssh/id_rsa.pub
,并$HOME/.ssh/id_rsa
分别和他们做的.我还设置了GitHub设置,以便PyCharm知道我的用户名和密码,但这也没有用.
没有任何公共Git/GitHub存储库requirements.txt
导致任何问题(它们都安装正常).只有这两个私有GitHub存储库,PyCharm似乎无法安装需求.
在安装需求时,如何让PyCharm使用我的GitHub SSH密钥requirements.txt
?
注意:我在这里广泛查看了一个类似(但不重复)的问题:GetAddrInfo cannot resolve ipv6.google.com (but nslookup can)。这个问题已有 9 年历史,OP 没有遇到与我完全相同的行为,并且已经接受的答案并没有解决我的问题——事实上,我特意遵循了那个答案的建议,但在样本中没有用下面的代码,我得到的错误与那个问题不同。此外,我仅仅通过评论就成功地让任何人参与到一个古老的问题中的可能性为零。这与我今天遇到的问题不同,所以我创建了一个新的、更详细的问题。
我有一台运行 Visual Studio 2017 的 Windows 10 机器和一台运行 Visual Studio 2019 的 Windows Server 2016 机器。两台机器都配置了 IPv4 和 IPv6 地址。在两台机器上,nslookup.exe
返回三个不同域的预期结果:
> nslookup www.google.com
...
Addresses: 2607:f8b0:4002:80a::2004
172.217.3.228
...
> nslookup ipv4.google.com
...
Addresses: 74.125.136.102
...
> nslookup ipv6.google.com
...
Addresses: 2607:f8b0:4002:812::200e
...
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试编写一个示例程序,用于GetAddrInfo
查找这三个相同的域:
#include <iostream>
#include <sstream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"WS2_32.Lib")
int main(int argc, char* argv[])
{
WORD wVersionRequested = MAKEWORD(2, 2); …
Run Code Online (Sandbox Code Playgroud) 背景:我们使用 Bitbucket Server(即将升级/切换到 Bitbucket DataCenter)。在我们的身份验证设置中,我们禁用了用户密码(网络身份验证通过不同的方式进行),因此出于 Bitbucket/Git 的目的,我们使用 Bitbucket 个人访问令牌 (PAT)。(SSH 密钥身份验证在我们的组织中不是一个选项。)对于克隆/推送等,我们在提示输入凭据时一直使用我们的用户名和 PAT。这是可行的,但由于我无法了解我们的身份验证设置的原因,它正在创建与我们的自动化构建以及大型用户交互式本地构建相关的性能问题。
Bitbucket 不使用 HTTP(S) 基本身份验证,还支持 HTTP(S) 承载令牌身份验证,您只需提供 PAT,无需提供用户名。这样做可以解决我们的性能问题。对 REST API 请求执行此操作很简单。在 Git 上这样做比较棘手。此 Bitbucket 文档建议这样做:
$ git clone -c http.extraHeader='Authorization: Bearer xxxx' https://bitbucketserver.com/scm/projectname/teamsinspace.git
Run Code Online (Sandbox Code Playgroud)
这有效!但它通过命令历史记录等向其他人公开 PAT。不公开 PAT 的更安全的变体也可以使用:
$ git clone --config-env=http.extraHeader=GIT_AUTHORIZATION_HEADER https://bitbucketserver.com/scm/projectname/teamsinspace.git
Run Code Online (Sandbox Code Playgroud)
哪里。GIT_AUTHORIZATION_HEADER
Authorization: Bearer xxxx
但这仍然有一些缺点,即它无法使用.gitconfig
并且必须添加到每个命令中,并且用户必须提前配置它并且无法提示输入安全存储在 Git 凭证中的 PAT帮手。
GitLab 提供了一个“神奇的用户名” OAuth2
,可以通过基本身份验证向其提供令牌,该身份验证本质上告诉服务器“忽略用户名,仅使用令牌进行身份验证”。Bitbucket 还提供了类似的“神奇用户名” x-token-auth
,但它似乎要么仅限于云,要么仅限于存储库访问令牌,或者两者兼而有之,因为我们尝试使用它,但它只会导致身份验证错误。访问这样的功能将允许我们对神奇的用户名进行硬编码.gitconfig
,并且开发人员只会被提示输入“x-token-auth@our-server.com 的密码”,这将是 PAT。但是,遗憾的是,我们无法使用此功能。
大约 14 年前,Git 邮件列表上曾有一次关于支持 Bearer 令牌身份验证的讨论,甚至提出了一个补丁,但看起来并没有任何进展。理论上,我可以应用该补丁的现代化版本并重新编译 Git,但这对于我们的开发人员组织来说确实不是一个理想的解决方案。
我考虑过创建一个 …
git authentication bitbucket http-authentication bearer-token
c# ×2
maven ×2
mysql ×2
python ×2
.net ×1
bearer-token ×1
bitbucket ×1
c++ ×1
class ×1
config ×1
expand ×1
getaddrinfo ×1
git ×1
github ×1
gtid ×1
hibernate ×1
instance ×1
ipv6 ×1
java ×1
javadoc ×1
jpa ×1
logging ×1
mocking ×1
moq ×1
mysqli ×1
odata ×1
php ×1
pickle ×1
pycharm ×1
select ×1
sha256 ×1
sockets ×1
spring ×1
ssh-keys ×1
ssl ×1
visual-c++ ×1
windows ×1