小编awe*_*ome的帖子

如何在mongodb java spring中保存null dbref的对象?

我正在寻找一种解决方案,在mongodb java spring框架中使用null dbref保存对象.请考虑以下示例:

@Document
public class A {
    @Id
    private String id;
    @DBRef
    private B b;

    public A() {
        this.b = null;
    }

    ...
}

@Document
public class B {
    @Id
    private String id;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我实例化A,即A a = new A();通过存储库将此对象保存到mongodb,即aRepo.save(a).然后,我有以下例外:

org.springframework.data.mapping.model.MappingException: Cannot create a reference to an object with a NULL id.
Run Code Online (Sandbox Code Playgroud)

有没有办法用null dbref保存对象?

谢谢你的帮助!

java spring mongodb spring-data spring-data-mongodb

10
推荐指数
1
解决办法
6555
查看次数

如何使用Spring安全性从经过身份验证的用户将数据库地址保存到数据库?

当用户登录我的spring应用程序时,我需要跟踪IP地址.

security.xml文件:

<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
    <password-encoder ref="passwordEncoder">
        <salt-source user-property='username' />
    </password-encoder>
</authentication-provider>
Run Code Online (Sandbox Code Playgroud)

用豆子:

<beans:bean id="passwordEncoder"
    class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
    <beans:constructor-arg value="512" />
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

我有一个自定义userService,方法loadUserByUsername()返回自定义UserDetails.此方法通过DAO从数据库获取UserDetails.UserDetails包含与用户相关的内容,例如他的用户名,密码,权限,电子邮件地址,以及特定于应用程序的变量.我需要在JSP页面中访问这些变量.

我希望在我的应用程序中成功验证用户时,将数据库(通过调用自定义服务中的方法调用DAO方法)保存到IP地址,时间戳和用户ID.

我不知道该怎么做:我应该实现自定义身份验证提供程序吗?扩展DaoAuthenticationProvider?或AbstractUserDetailsAuthenticationProvider?或者是其他东西?

更一般的问题:

A.一旦用户提供正确的凭据,我在哪里可以添加一个方法来调用?

B.如何检索用户的IP地址?(知道tomcat在反向代理中运行apache).

我试着看相关的问题/答案,但这让我更加困惑.如果有人可以提供一个非常简单的逐步实现,那将是非常棒的.谢谢!

java authentication ip spring spring-security

7
推荐指数
1
解决办法
3459
查看次数

java spring中如何避免使用同一个会话并发访问控制器方法?

我想知道如何确保每个会话一次只访问服务中的某些方法一次。

我将通过一个小例子来说明:

假设我们有一个用户处于状态 A (user.state = A)。这个用户向我们的 java spring 控制器发送一个 HTTP GET 请求来获取一个页面,比如 /hello。根据他的状态,他将被发送到 A 或 B。在此之前,我们将他的状态更改为 B(见下面的代码)。

现在,再次假设调用 dao.doSomething(); 需要很多时间。如果用户发送另一个 GET(例如通过刷新浏览器),他将调用完全相同的方法 dao.doSomething(),导致 2 次调用。

你怎么能避免呢?

如果您同时发送 2 个 HTTP GET 会发生什么?

如何在控制器/服务/模型/数据库中保持一致?

注意 1:这里我们不会从不同的浏览器发出 2 个 HTTP GET。我们只是在同一个浏览器上同时创建它们(我知道最大并发会话解决方案,但这并不能解决我的问题。)。

注2:解决方案不应阻塞不同用户对控制器的并发访问。

我已经阅读了一些关于服务交易的内容,但我不确定这是否是解决方案。我也阅读了一些关于并发的内容,但我仍然不明白如何在这里使用它。

我将不胜感激您的帮助!谢谢!

代码示例:

@Controller
public class UserController {    

    @RequestMapping(value='/hello')
    public String viewHelloPage() {

        // we get the user from a session attribute
        if (user.getState() = A) {
            user.setStatus(B);
            return "pageA";
        }

        return "pageB";
    }


@Service
public class UserService {
    Dao …
Run Code Online (Sandbox Code Playgroud)

java concurrency spring spring-mvc

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

如何使用crossfilter和DC.js处理缺失的数据?

让以下数据集:

var dataset = [
    {
        "user": "u1",
        "question1": "answer1",
        "question2": "answer2",
        ...
    },
    ...
];
Run Code Online (Sandbox Code Playgroud)

假设此数据集不完整:某些用户可能已回答了一个问题,但未回答另一个问题.因此,此数据集有一些空白,其中未出现值"questionX".

假设我们为每个问题创建了相关的饼图,如下所示:

var questions = ["question1", "question2", ...];
var cf = crossfilter(dataset);

for (var i = 0; i < questions.length; i++) {

    var questionDim = cf.dimension(function(d) { return d[questions[i]]});
    var questionGrp = questionDim.group().reduceCount();

    plotPieChart("#dc-" + questions[i], questionDim, questionGrp); // helper function to plot standard DC pie chart based on a dimension and group.
}
Run Code Online (Sandbox Code Playgroud)

看起来该组没有正确处理缺失值,仍然将缺失点分类为第一个可能的类别.

  1. 这是一个错误吗?

  2. 如果没有,一种可能的解决方案是预处理数据集并使用虚拟答案添加缺失的问题(例如"NA").但是,通过这样做,"NA"答案将显示为一个馅饼.那么如何从显示的结果中删除这个虚拟饼?

  3. 有没有更好的方法来处理这样的问题?

谢谢!

javascript crossfilter dc.js

0
推荐指数
1
解决办法
950
查看次数