通过将其作为Spring Boot应用程序运行(针对SDK内置的应用服务器运行),WebApp可以正常工作。
不幸的是,相同的AuthN进程在undertow/wildfly上根本不起作用。
根据日志,IdP实际上执行了AuthN进程:我的自定义userdetails
实现的指令被正确执行。尽管有执行流程,但Spring并没有为当前用户设置和保存特权。
@Component
public class SAMLUserDetailsServiceImpl implements SAMLUserDetailsService {
// Logger
private static final Logger LOG = LoggerFactory.getLogger(SAMLUserDetailsServiceImpl.class);
@Override
public Object loadUserBySAML(SAMLCredential credential)
throws UsernameNotFoundException, SSOUserAccountNotExistsException {
String userID = credential.getNameID().getValue();
if (userID.compareTo("jdoe@samplemail.com") != 0) { // We're simulating the data access.
LOG.warn("SSO User Account not found into the system");
throw new SSOUserAccountNotExistsException("SSO User Account not found into the system", userID);
}
LOG.info(userID + " is logged in");
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
GrantedAuthority authority = new SimpleGrantedAuthority("ROLE_USER");
authorities.add(authority);
ExtUser userDetails = new ExtUser(userID, "password", true, true, true,
true, authorities, "John", "Doe");
return userDetails;
}
}
在调试过程中,我发现问题出在FilterChainProxy
类上。在运行时,ServletRequest
的属性filter_appliced
的值为空,因此Spring将清除SecurityContextHolder
。
private final static String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED");
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
boolean clearContext = request.getAttribute(FILTER_APPLIED) == null;
if (clearContext) {
try {
request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
doFilterInternal(request, response, chain);
} finally {
SecurityContextHolder.clearContext();
request.removeAttribute(FILTER_APPLIED);
}
} else {
doFilterInternal(request, response, chain);
}
}
在VMware vFabric tc服务器和Tomcat上,一切都运行得很好。你对解决这个问题有什么想法吗?
在调查这个问题时,我注意到身份验证请求中的cookie和引用存在一些混乱。
当前,如果将webapplication上下文更改为根上下文,则wildfly身份验证将起作用:
<server name="default-server" default-host="webapp">
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost" default-web-module="sso.war"/>
</server>
重新启动wildfly并清除cookie后,所有工作都将按预期进行
我们与实体1和实体2有多对多的关系。 现在,当我们删除Entity2的一个元素时,实际上并不是从数据库中删除它,而是简单地将字段“isactive”设置为false。 在SQL中,这将转换为entity1表、entity2表和entity1TOentity2表。在SQL中,我们可以简单地进行一次更新, 在JPA中,我们可以将Entity1的所有元素作为对象加载,并对关系进行连接提取,然后在Java
我在springboot应用程序中有筛选器。在embedded tomcate 9.0.34中运行该应用程序时,它可以正常工作。然而,当我创建war并将其部署在外部Tomcate8.5上时,它会抛出以下错误。
在https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html我们了解到: 以上代码显示了我们如何为t恤添加aggs,但我们如何做到: 和
我的JUnitRunner无法选择具有JBehave中指定的meta标记的场景。 以下是我的故事: 下面是我的运行程序文件: 当我作为JUnit test运行上述类时,没有调用带有烟雾标记的实际测试,也没有执行任何内容。 下面是我在执行上面的代码时得到的结果
我尝试创建另一个FilterChainProxy bean,在其链列表中包含上述两个过滤器,并将该bean作为自定义过滤器添加到之前的名称空间配置中,过滤器似乎可以工作,但我的JSF导航中断了,特别是在commandLink中(我认为使用此FilterChainProxy时AJAX调用失败) 有没有人可以就如何将这两个过滤器和可能的其他过滤器添加到Spring Security过滤器链提出任何想法
我正在尝试将spring-security-oauth添加到一个带有spring-security的现有应用程序中。我正在使用Java配置。 我有一个已修改的筛选器链(添加了一些自定义筛选器),但是对'/oauth/token'的请求没有使用它,而是使用了'default'筛选器链。如何访问保护oauthendpoint的筛选器链,以便也可以在那里使用自定义筛选器,或者将oauthendpoint