我正在尝试为I18N实现构建JPA规范,以便能够过滤名称.
在数据库中,我有多种语言的翻译.
问题是大多数时候只指定默认语言.
因此,当有人请求翻译非默认语言时,我希望它能够使用默认语言.
到目前为止,我能够在规格中构建它
Specification<S> specification = (root, query, cb) -> {
Join i18n = root.join("translations", JoinType.LEFT);
i18n.alias("i18n");
Join i18nDefault = root.join("translations", JoinType.LEFT);
i18nDefault.alias("i18nDefault");
i18n.on(cb.and(cb.equal(i18n.get("itemId"), root.get("itemId")), cb.equal(i18n.get("languageId"), 1)));
i18nDefault.on(cb.and(cb.equal(i18nDefault.get("itemId"), root.get("itemId")), cb.equal(i18nDefault.get("languageId"), 22)));
// Clauses and return stuff
};
Run Code Online (Sandbox Code Playgroud)
但这会导致错误,这听起来像是这个解决方案的坏消息
org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause referenced two different from-clause elements
[
select generatedAlias0 from com.something.Item as generatedAlias0
left join generatedAlias0.i18n as i18n with (i18n.itemId=generatedAlias0.itemId) and ( i18n.languageId=1L )
left join generatedAlias0.i18n as i18nDefault with (i18nDefault.itemId=generatedAlias0.itemId) and ( i18nDefault.languageId=1L )
];
Run Code Online (Sandbox Code Playgroud)
所以Hibernate不允许我用不同的元素构建一个with子句(在本例中是itemId和languageId).
有什么方法可以正确地或以不同的方式实现这个?
最后,我希望Hibernate生成一个如下所示的查询(Oracle) …
我相信在stackoverflow之前已经问过这个问题.我想提一下,我尝试了与我相关的问题所带来的解决方案.最接近我的问题的是:
在JAR中加载属性文件?.
可悲的是,那里描述的解决方案对我不起作用.由于问题的年龄,我想再问一遍是要走的路.
继续描述我的问题.
所以目前我正在开发一个已经使用maven设置的库项目,并为当前的Spring AMQP项目创建了一个扩展.
这里的目标是提供一个JAR文件,该文件可以包含在另一个项目中,以支持通过消息代理进行通信的特定方式.
此时,我正在实现配置选项,以允许用户根据自己的喜好配置消息传递客户端.但是当我测试这个功能的功能时,我在可执行的JAR中使用库时遇到了问题.
在Eclipse工作区中运行它时,一切似乎都运行得很好.但是当我尝试从我的桌面运行它(作为一个可运行的JAR)时,似乎找不到任何属性文件.
只是为了快速概述上面描述的工作空间/项目设置:

两个项目的项目结构都反映了Maven默认的一个:
- src/main/java
- java source files
- src/main/resources
- resource files
- src/test/java
- java test files
- src/test/resources
- test resource files
Run Code Online (Sandbox Code Playgroud)
库文件在src/main/resources文件夹中包含default.properties文件,而chatclient项目包含custom.properties文件.
一旦构建了可运行的JAR文件,它就具有以下结构.
- com
- junit
- META-INF
- org
- resources
- default.resources
- custom.resources
Run Code Online (Sandbox Code Playgroud)
我相信资源文件不应该位于那里.但在META-INF/maven文件夹中.尝试过这样的东西之后:
但似乎没有任何效果.我猜这是Maven相关的,并且pom.xml中的一个简单更改可以修复它.遗憾的是,我对Maven项目设置和pom相关主题的了解非常基础(这是我使用maven的第一个项目).我似乎无法找到任何文件,即使我知道它应该在那里(可能是由我引起的问题).
在我忘记提及之前.我使用这种方式加载属性文件:
Properties props = new Properties();
prop.load(<custom static class>.class.getResourceAsStream(filename));
return props;
Run Code Online (Sandbox Code Playgroud)
我的库的pom.xml看起来像:
-- Artifact stuff --
<packaging>jar</packaging>
<build>
<plugins>
<plugin> …Run Code Online (Sandbox Code Playgroud) 上周,我开始扩展UserDetails类,以便能够支持自定义字段.关于这个领域的特殊之处在于它填充了一个取决于请求参数的值.我设法正确地实现了这个(所以问题不关注那个).
现在的问题是,在成功登录后,UserDetails对象被正确填充(我能够使用AuthenticationSuccessHandler看到这一点),并且客户端从OAuth2提供程序接收JWT令牌.然后,客户端通过访问"/ uaa/user"端点尝试获取有关用户的更多详细信息.这被设置为返回Principal对象.但在检查Principal对象的内容后,我被告知UserDetails对象丢失了.方法getPrincipal()仅返回用户名而不是UserDetails对象.
根据这个问题,这是登录失败的结果.AuthenticationToken(在本例中为UsernamePasswordAuthenticationToken)被AuthenticationManager拒绝.我不知道它为什么要做这样的事情.使用默认UserDetails对象的身份验证似乎工作得很好.有人可以帮我解决这个问题吗?
有关已实现类的一些细节(如上所述).有些代码因此被遗漏.
CustomUserDetails
public class CustomUserDetails extends User {
private final Integer custom;
public CustomUserDetails (...default params..., Integer custom) {
super(...default params...);
this.custom = custom;
}
}
Run Code Online (Sandbox Code Playgroud)
CustomUserDetailsService
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Override
public CustomUserDetails loadUserByUsername(String username) throw UsernameNotFoundException {
return new CustomUserDetails(...default params..., 12345);
}
}
Run Code Online (Sandbox Code Playgroud)
组态
@Autowired
private CustomUserDetails userDetails;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetails);
}
Run Code Online (Sandbox Code Playgroud)
用户端点
@RequestMapping(value = "/user", method = RequestMethod.GET)
@ResponseBody
public Principal …Run Code Online (Sandbox Code Playgroud) 我一直试图让Bamboo使用代码测试.我正在使用codeception来测试symfony项目中的代码.
经过一些研究,我发现了一篇关于如何使用代码设置Jenkins的文章.
一旦阅读,我发现我应该使用Ant来运行运行测试的代码命令.
问题是我真的不知道放在哪里.本文解释了新Ant任务的所有字段,但似乎没有任何效果.
有人可以帮帮我吗?
我正在尝试将我的security.yml中的access_control参数作为我的自定义服务中的数组.
就像获取role_hierarchy参数一样,我认为它可以使用以下代码:
$accessParameters = $this->container->getParameter('security.access_control');
不幸的是,情况并非如此.
有人可以告诉如何获取参数吗?
我一直在努力让这个工作几天,但似乎我找不到解决方案。这就是为什么我想在这里问它。
精简版
我有一个多租户实现,它适用于 Spring Boot、Spring Data JPA 和 Hibernate。这就像一个魅力。但现在我想实现一个功能,在单个事务期间切换数据库(数据源)。例如我在我的服务类中使用类似的代码
@Autowired
private CustomRepository customRepository;
@Autorwired
private CustomTenantIdentifierResolver customResolver;
@Transactional
public Custom getCustom(String name) {
// Set the datasource to "one";
this.customResolver.setIdentifier("one");
Custom result = this.customRepository.findOneByName(name);
//If the result is null, switch datasource to default and try again
this.customResolver.setIdentifier("default");
result = this.customRepository.findOneByName(name);
return result;
}
Run Code Online (Sandbox Code Playgroud)
问题是,我的数据源没有切换。它对第二个请求使用相同的源。我想我在这里做错了什么。
在单个事务期间切换数据源的正确方法是什么?
编辑 (07-06-2016)
由于我注意到切换单个事务的数据源不起作用,我将添加一个后续内容。
是否可以为单个用户请求在两个事务之间切换数据源?如果是这样,这样做的正确方法是什么?
长版
在继续之前,我想提一下,我的多租户实现基于此博客上提供的教程。
现在,我的目标是在动态数据源(由自定义标识符选择)无法找到结果时使用默认数据源作为后备。所有这些都需要在单个用户请求中完成。它在解决方案中使用单个或多个事务注释方法没有区别。
到现在为止,我尝试了几件事,其中一个是上面描述的,另一个包括使用多个事务管理器。该实现使用一个配置文件来创建两个事务管理器 bean,每个 bean 都有不同的数据源。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Autowired
private …Run Code Online (Sandbox Code Playgroud) 尽管有关堆栈溢出的所有其他问题,但我无法使用所有提供的信息解决问题.
这就是为什么我决定创建一个新的.
所以我在登录表单中实现了记住我的功能,其复选框看起来像这样:
<input type="checkbox" id="form_saveCredentials" name="form[saveCredentials]">
Run Code Online (Sandbox Code Playgroud)
登录时一切都很好,cookie设置正确

通过整个浏览器会话,cookie仍然存在.
但是当我关闭浏览器并重新打开它时,cookie仍然在那里(还没有导航到我的localhost!).
当我在localhost上导航到我的网站时,cookie会根据响应标头被删除

我不知道为什么cookie会在导航到网站时被删除.
问题可能在于remember_me功能的securtiy.yml设置
firewalls:
somefirewall:
form_login:
remember_me: true
remember_me:
key: %secret%
lifetime: 31536000
remember_me_parameter: 'form[saveCredentials]'
path: /
domain: ~
Run Code Online (Sandbox Code Playgroud)
有关如何解决这个问题的任何想法?提前致谢
为了能够在我的VHDL设计中支持可扩展性,我开始使用记录作为我的组件的输入和输出.目前,我正处于使用顶级架构中的端口映射将组件链接到外部的位置.问题是,记录有多个必须与不同来源链接的变量.
目前我在VHDL代码中使用的记录看起来像这样(名称已被假货替换):
TYPE some_record_input IS RECORD
input_one : sfixed(3 downto -32);
input_two : sfixed(3 downto -32);
input_rst : std_logic;
END RECORD;
TYPE some_record_output IS RECORD
output_one : std_logic_vector(15 downto 0);
output_dn : std_logic;
END RECORD;
Run Code Online (Sandbox Code Playgroud)
因此我正在使用fixed_pkg库来获取固定点.
这些记录在实体端口映射中使用如下.
ENTITY my_component IS
port
(
clk : IN std_logic;
data : IN some_record_input;
result : OUT some_record_output
);
END my_component;
Run Code Online (Sandbox Code Playgroud)
现在问题发生的部分.我在顶层使用这个组件将它与我的Altera Board可用的按钮和LED连接起来.这是通过在我的顶级实体的主体中使用端口映射来完成的:
A0 : my_component PORT MAP(clk => CLK, data => (input_one => IONE, input_two => ITWO, input_rst => RST), result => (output_one …Run Code Online (Sandbox Code Playgroud) 问题场景
我目前正在处理我的应用程序的登录页面,该页面基于Spring启动和相关的Spring项目(如安全性和云).我希望我的应用程序的用户为登录页面添加书签,因此需要采取这种行为.当我开始考虑潜在的问题时,我认为在您为页面添加书签后,应用程序将无法知道重定向到哪里(因为这可能是多个URL)(因为只有/ login且没有重定向,所以).通常,用户不会,例如,/ dashboard被重定向到登录,因为没有身份验证.在使用呈现他或她的凭证之后,应用程序重定向用户.但这只是可能的原因,应用程序在当前会话中保存SavedRequest,告知重定向位置.
我想要实现的目标
基本上我想要实现的是应用程序在用户在/ login url上设置书签后知道去哪里.这里理想的情况是/ login url包含重定向参数.例如.
现在,如果用户将对在步骤2中提供的URL添加书签,则在一段时间之后单击书签时,将向应用程序提供足够的信息以进行合理的重定向.
如果有人知道更好的方法,我想听听.
迄今采取的步骤
到目前为止,我的搜索基于StackOverflow上的另一个答案.这似乎是朝着正确方向迈出的一步,但仍然缺少一些所需的功能.
我首先创建了LoginUrlAuthenticationEntryPoint类的Custom实现.它会覆盖begin方法,如下所示:
public class CustomLoginUrlAuthenticaitonEntryPoint extends LoginUrlAuthenticationEntryPoint
{
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException
{
if (!request.getRequestURI().equals(this.getLoginFormUrl()))
{
RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
redirectStrategy.sendRedirect(request, response, getLoginFormUrl() + "?redirect=" + request.getRequestURI() + "?" + request.getQueryString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将此自定义类添加到HttpSecurity作为默认身份验证入口点.
@Configuration
@Order(-20)
public class SecurityConfig extends WebSecurityConfigurerAdapter …Run Code Online (Sandbox Code Playgroud) java ×4
php ×2
spring ×2
symfony ×2
ant ×1
bamboo ×1
codeception ×1
components ×1
cookies ×1
eclipse ×1
hibernate ×1
jar ×1
maven ×1
multi-tenant ×1
predicate ×1
properties ×1
record ×1
redirect ×1
security ×1
service ×1
spring-data ×1
toplevel ×1
vhdl ×1