首先,一些背景:
我目前正在开发一个项目,我在其中使用Google的AppEngine(GAE)上的Spring框架从Google的一项服务中获取一些数据.为此,我使用了Google的OAuth工具.对于这一点,我需要使用clientSecret和clientId特定于我的应用程序.由于这些是静态配置值,我使用Spring <util:properties>(链接到文档)功能将这些值插入到适当的类中.
XML配置:
<util:properties id="googleProperties" location="WEB-INF/google.properties" />
Run Code Online (Sandbox Code Playgroud)
课程用法:
@Value("#{googleProperties['google.data.api.client.id']}")
private String clientId;
Run Code Online (Sandbox Code Playgroud)
我的问题:
事实证明,生产(在App Engine上部署时)和开发(在我的本地机器上)的价值clientId和clientSecret需要不同.为了解决这个问题而不需要在部署时不断更改属性文件中的值,我一直在研究Spring的配置profiles,它允许我为生产和开发指定不同的属性文件.虽然我知道Spring配置文件是如何基于文档工作的,但我不确定在这种特定情况下适当的解决方案是什么.
换句话说,我如何根据我的应用程序是在本地部署还是在GAE上注入不同的属性文件?
我有一个创建新的表单Customer.客户可能拥有手机号码.移动号码应该没有+或00用户可以键入的前缀.这可以通过以下方式轻松完成:
$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Run Code Online (Sandbox Code Playgroud)
放置此代码的最佳位置是哪个?
CustomerController调用实体管理器之前并保持实体.这真的是MVC模式中的控制器问题吗?SanitizeCustomerSubscriber和听取FormEvents:POST_BIND事件CustomerSanitizer服务还有其他想法吗?当然,我说的是一般的数据操作,手机号码只是一个例子:要消毒的字段可能不仅仅是一个.
我有一个JAVA EE后端,我正在使用Spring MVC.我有一个像这样的AJAX调用:
function getAllProjects() {
$.getJSON("project/getall", function(allProjects) {
???
});
}
Run Code Online (Sandbox Code Playgroud)
我的后端系统:
@RequestMapping(value="/getall", method=RequestMethod.GET)
public @ResponseBody ??? getAllProjects() {
???
}
Run Code Online (Sandbox Code Playgroud)
我必须实施哪些内容才能实现?在后端系统中,我从数据库中调用唯一的id和项目的名称,例如:
1 => My Test Project
4 => Another One
23 => One More Test
Run Code Online (Sandbox Code Playgroud)
id和项目名称应返回到前端系统,因此我可以构建这种类型的HTML ul/li列表:
<ul>
<li><a href="/1">My Test Project</a></li>
<li><a href="/4">Another One</a></li>
<li><a href="/23">One More Test</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
我编写了自己的密码编码器,它实现了PasswordEncoderInterface:
class BCryptPasswordEncoder implements PasswordEncoderInterface {
protected $encoder;
public function __construct(BCryptEncoder $encoder) {
$this->encoder = $encoder;
}
public function encodePassword($raw, $salt) {
return $this->encoder->encodeString($raw, $salt);
}
public function isPasswordValid($encoded, $raw, $salt) {
return $this->encoder->encodeString($raw, $salt) == $encoded;
}
}
Run Code Online (Sandbox Code Playgroud)
编码器注册为具有id的服务bcrypt.password.encoder.但我不知道,如何告诉symfony使用它.目前app/config/security.yml看起来像这样:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
neo4j:
id: security.user.provider.neo4j
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
provider: neo4j
pattern: ^/.*
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout …Run Code Online (Sandbox Code Playgroud) 我按照这个文档来安装SonataMediaBundle但是我收到了这个错误:
PHP Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47
Run Code Online (Sandbox Code Playgroud)
使用sonata命令后生成应用程序:
php app/console sonata:easy-extends:generate SonataMediaBundle
Run Code Online (Sandbox Code Playgroud)
新目录生成于:
apps/Application/Sonata/MediaBundle
Run Code Online (Sandbox Code Playgroud)
一切都已完成,但当我在AppKernel.php中注册生成的应用程序时,我收到了该错误.
public function registerbundles()
{
return array(
...
new Application\Sonata\MediaBundle\ApplicationSonataMediaBundle(),
...
);
}
Run Code Online (Sandbox Code Playgroud)
你知道如何解决这个问题吗?
我正在研究获取实体的所有验证约束的方法(我想要实现的是使用JQuery Validation Plugin在JSON中返回此数据并在客户端应用相同的约束),但是我在获取约束时遇到一些麻烦,这是我目前的代码:
$metadata = new \Symfony\Component\Validator\Mapping\ClassMetadata("Namespace\JobBundle\Entity\Job");
$annotationloader = new AnnotationLoader(new AnnotationReader());
$annotationloader->loadClassMetadata($metadata);
Run Code Online (Sandbox Code Playgroud)
我在$ metadata中得到的是一个用于constraints属性的空数组,其余的($ properties和$ members只有错误消息......但不是实际的约束(例如:required,integer ...)).
我做错了什么?
我们构建了一个非常"纯粹"的RESTful服务器,它使用HTTP BASIC AUTHENTICATION.这意味着客户端需要在每个请求时发送用户名/密码.它简单而安全(通过HTTPS).REST当然是无状态的并且不使用会话,因此API中没有"登录"方法.每个请求都需要再次授权.
在这个REST服务器上,我们构建了一个AngularJS客户端.这是一个单页面应用程序.当用户登录到客户端时,客户端将存储凭据并确保设置了正确的HTTP标头.
"问题"是当用户刷新浏览器时,应用程序将失去其状态,包括身份验证凭据.
处理这个问题的最佳方法是什么?AngularJS应用程序如何让用户登录/记住凭据?无论解决方案是什么,它都必须是安全的,因为它是一个银行应用程序.
我正在研究一个mp4容器解析器,但是我疯狂地试图识别流的音频编解码器.我使用了QtAtomViewer和AtomicParsley,但是当我找到原子时:
trak-> mdia-> minf-> stbl-> STSD
即使mp4文件有mp3流,我也总是"mp4a".
我应该找一个".mp3"fourcc吗?
我附加了两个不同的mp4结构:带有AAC音频流的mp4容器
Atom trak @ 716882 of size: 2960, ends @ 719842
Atom tkhd @ 716890 of size: 92, ends @ 716982
Atom mdia @ 716982 of size: 2860, ends @ 719842
Atom mdhd @ 716990 of size: 32, ends @ 717022
Atom hdlr @ 717022 of size: 33, ends @ 717055
Atom minf @ 717055 of size: 2787, ends @ 719842
Atom dinf @ 717063 of size: 36, ends @ 717099
Atom …Run Code Online (Sandbox Code Playgroud) 我有一个3层的表单:First Layer是游戏的容器:
class GameListType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('games', 'collection', array(
'required' => false,
'allow_add' => true,
'prototype' => true,
'by_reference' => false,
'type' => new GameBetType(),
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
parent::setDefaultOptions($resolver);
$resolver->setDefaults(array(
'cascade_validation' => true,
));
}
}
Run Code Online (Sandbox Code Playgroud)
第二层是游戏本身,因为我不打算改变游戏,但是赌注,它只包括赌注的形式:
class GameBetType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('bet', new BetType());
}
public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver) {
parent::setDefaultOptions($resolver);
$resolver->setDefaults(array(
'data_class' => 'Strego\TippBundle\Entity\Game',
'cascade_validation' => true,
)); …Run Code Online (Sandbox Code Playgroud) 我想编写一个平滑List的函数.
object Flat {
def flatten[T](list: List[T]): List[T] = list match {
case Nil => Nil
case head :: Nil => List(head)
case head :: tail => (head match {
case l: List[T] => flatten(l)
case i => List(i)
}) ::: flatten(tail)
}
}
object Main {
def main(args: Array[String]) = {
println(Flat.flatten(List(List(1, 1), 2, List(3, List(5, 8)))))
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它不起作用,它返回List(1, 1, 2, List(3, List(5, 8)))但应该是List(1, 1, 2, 3, 5, 8).
你能给我一个提示吗?