我是Java和Spring 3的新手(过去8年主要使用PHP).我已经获得了spring security 3来使用所有默认的userDetails和userDetailsService,我知道我可以使用以下命令访问控制器中登录用户的用户名:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName(); //get logged in username
Run Code Online (Sandbox Code Playgroud)
但有两个问题我无法弄清楚:
当用户登录时,我希望存储许多其他用户详细信息(例如DOB,性别等),并且稍后可以通过控制器访问.我需要做什么才能创建的userDetails对象包含我的自定义字段?
我已经调用了"HttpSession session = request.getSession(true);" 在我的控制器中的每个方法的顶部.是否可以在登录时将登录用户的userDetails存储在会话中,这样我就不需要再调用"Authentication auth = SecurityContextHolder.getContext().getAuthentication();" 在每个方法的开头?
安全applicationContext.xml中:
<global-method-security secured-annotations="enabled"></global-method-security>
<http auto-config='true' access-denied-page="/access-denied.html">
<!-- NO RESTRICTIONS -->
<intercept-url pattern="/login.html" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/*.html" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<!-- RESTRICTED PAGES -->
<intercept-url pattern="/admin/*.html" access="ROLE_ADMIN" />
<intercept-url pattern="/member/*.html" access="ROLE_ADMIN, ROLE_STAFF" />
<form-login login-page="/login.html"
login-processing-url="/loginProcess"
authentication-failure-url="/login.html?login_error=1"
default-target-url="/member/home.html" />
<logout logout-success-url="/login.html"/>
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource" authorities-by-username-query="SELECT U.username, UR.authority, U.userid FROM users U, userroles UR …Run Code Online (Sandbox Code Playgroud) 我有一个名为sport的POJO,其属性为sportID,sportName,玩家数量.使用带注释的验证我编写了自己的注释约束来检查数据库中是否存在sportName.它在尝试添加sportName时效果很好,但是如果我尝试在不更改sportName的情况下更新玩家,则验证也会失败.
有没有办法在带注释的验证中传递参数?例如,我想将sportID传递给sportName约束检查,以便我可以在db查询中排除该ID.
或者有更好的方法吗?在我的控制器中,我应该让Spring验证输入(使用@Valid)然后如果没有错误,请调用验证函数来检查业务规则?
如果我称之为ngOnInit(),使可观察到的调用来获取数据的功能,是ngOnInit的this.getSomething()调用还是异步或不ngOnInit等到this.getSomething()返回一个结果?基本上"doSomethingElse"在this.getSomething()完成之前或之后在ngOnInit()中执行了吗?
ngOnInit() {
this.getSomething();
doSomethingElse;
}
getSomething() {
this.someService.getData()
.subscribe(
result => {
this.result = result;
},
error => this.errorMessage = <any>error);
}
Run Code Online (Sandbox Code Playgroud) 我在laravel 4中使用原始查询,有没有办法检查插入内容上的受影响行? DB::getPdo()->rowCount();给我一个"undefined method" error。代码如下:
$query = "INSERT IGNORE INTO table (id) VALUES (?)";
$doQuery = DB::insert($query, array($value));
if ($doQuery) {
return DB::getPdo()->last();
} else {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果不是,是否有一种简便的方法可以确定是否完成插入而不进行两次查询?
spring ×2
angular ×1
asynchronous ×1
laravel-4 ×1
mysql ×1
ngoninit ×1
pdo ×1
php ×1
validation ×1