我看到了关于这个问题的其他帖子,但仍然没有找到合适的答案。
我提交的表单有三个参数,而不是两个。
这里是我的CustomAuthenticationProvider:
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
private static final Logger logger = LoggerFactory.getLogger(CustomAuthenticationProvider.class);
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
String userName = auth.getName().trim();
String password = auth.getCredentials().toString().trim();
String companyName ;
if (userName.equals("admin") && password.equals("123456")) {
List<GrantedAuthority> grantedAuths = new ArrayList<>();
grantedAuths.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
Authentication upat = new UsernamePasswordAuthenticationToken(userName, password, grantedAuths);
logger.info("{}:{}",userName,grantedAuths);
return upat;
} else {
return null;
}
}
@Override
public boolean supports(Class<?> auth) {
return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(auth));
}
我想从登录表单获取额外参数,以验证CustomAuthenticationProvider中的companyName
如何从登录表单中获取参数?
经过另一篇文章的研究和专业修改,我通过注入身份验证详细信息来源
和Web身份验证详细信息来
解决问题。因此,我将在这里分享解决方案:
首先为自定义筛选器创建新类以获取参数:
class ExtraParam extends WebAuthenticationDetails {
private static final long serialVersionUID = 1L;
private final String company;
public ExtraParam(HttpServletRequest request) {
super(request);
this.company = request.getParameter("company");
}
public String getCompanyName() {
return company;
}
}
然后创建用于注入的源类:
class ExtraParamSource implements AuthenticationDetailsSource<HttpServletRequest, ExtraParam> {
public ExtraParam buildDetails (HttpServletRequest context) {
return new ExtraParam(context);
}
}
之后,修改了您的Spring Security xml以识别类和过滤器:
在您的中添加
authentication details source ref=“ExtraParam”
<form-login ... authentication-details-source-ref="ExtraParamSource"... />
不要忘记豆子:
<beans:bean id="ExtraParamSource" class="com.xxx.xxx.xxx.ExtraParamSource"/>
然后完成!仅此而已。要获取参数,请使用如下示例:
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider{
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
String userName = auth.getName().trim();
String password = auth.getCredentials().toString().trim();
String companyName = ((ExtraParam)auth.getDetails()).getCompanyName();
....
引用:
1)如何通过Spring安全登录页面传递附加参数
问题内容: 我正在一个springMVC项目中,其中用户身份验证基于Spring安全性。 这个想法是要拥有一个移动(android)应用程序,以便能够将某种数据发送到后端。 因此,在开始开发android之前,我决定使用cURL模拟登录表单的情况。 我们网站上的登录表单如下: 我使用以下命令: 但是我将获得登录页面,换句话说,我无法根据模拟情况通过用户身份验证。 只需注意:对于每一个请求,spri
所以我想学习SwiftUI和Combine。我通常通过制作一个简单的小费计算器来开始新技术。 我似乎得到了一个随机的“调用中的额外参数”编码时出错这是我的SwiftUI文件 然而,如果我在TipView主体上添加另一个视图(任何视图),我似乎会得到一个“调用中的额外参数”错误。 这里是错误的图片 有人知道是怎么回事吗?
这是我正在尝试的代码 为了将脚本中的参数一个接一个地发送到文本字段中,我要做什么?有可能吗?
问题内容: 我有以下功能。WordPress功能,但这实际上是一个PHP问题。它们根据每个对象的元数据中的属性对我的对象进行排序。 我想在第一个函数中传递一个字符串。这将使我可以重复使用此代码,因为我可以将其应用于各种元数据属性。 但是我不明白如何将 额外的 参数传递给usort回调。我试图制作一个JS风格的匿名函数,但是服务器上的PHP版本太旧,并引发了语法错误。 非常感谢您提供的任何帮助-或将
问题内容: 我有一个函数,将回调函数作为参数,并用一个参数调用它。 我还有一个带有两个参数的函数:和。 我想将函数作为参数传递给,但我也想作为第二个参数()传递给。我怎样才能做到这一点? 问题答案: 只需创建一个包装回调: 或使用ECMAScript 6箭头功能:
很好的一天。我正在尝试使用php和xampp创建一个登录表单来运行代码。我在phpMyAdmin中已经有一个数据库,我得到了这个错误 连接! 致命错误:未捕获错误:调用C:\xampp\htdocs\login\connection中未定义的函数mysql\u query()。php:34堆栈跟踪:#0{main}在C:\xampp\htdocs\login\connection中抛出。第34行的