相关疑难解决方法(0)

如何在Spring Security中查找用户的IP?

我需要找到那些登录我们的应用程序的用户.
我们正在使用Spring Security,必须有办法找出用户的IP.

我认为这些信息存储在他们的会话中.在Spring Security中,当前会话存储在SessionRegistry中.从这个类我可以有经过身份验证的用户列表和一些会话信息.(使用getAllPrincipals,getAllSessionsgetSessionInformation)

的问题是,我怎么能有机会获得当前用户的IP地址?考虑我们必须仅为已知区域提供服务.
SessionInformation没有太大的帮助,因为它并不包含太多的信息.

ip session spring spring-security

11
推荐指数
3
解决办法
2万
查看次数

如何仅为特定URL添加Spring Security验证码过滤器

我正在寻找一种非侵入性的方法来为某些api调用添加验证码过滤器.

我的设置包括两个WebSecurityConfigurerAdapters,每个都有一个过滤器(不是验证码过滤器):

  • 内部api("/ iapi"在所有呼叫上使用过滤器A,但也忽略一些公共请求,如/ authenticate)
  • 外部api("/ eapi"在所有呼叫中使用过滤器B)

如何在Spring Security内容,公共内部api或外部api调用之前添加过滤器?我不需要SecurityContext,只需要检查请求头中的Captcha,转发到filterChain(普通过滤器)或手动拒绝访问.我尝试在web.xml中声明一个过滤器,但这会破坏使用依赖注入的能力.

这是我的Spring安全配置:

@EnableWebSecurity
public class SpringSecurityConfig {
    @Configuration
    @Order(1)
    @EnableGlobalMethodSecurity(securedEnabled = true)
    public static class InternalApiConfigurerAdapter extends WebSecurityConfigurerAdapter {

        @Autowired
        private Filter filterA;

        public InternalApiConfigurerAdapter() {
            super(true);
        }

        @Override
        public void configure(WebSecurity web) throws Exception {
            web
                    .ignoring()
                    .antMatchers("/public/**");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .antMatcher("/iapi/**")
                    .exceptionHandling().and()
                    .anonymous().and()
                    .servletApi().and()
                    .authorizeRequests()
                    .anyRequest().authenticated().and()
                    .addFilterBefore(filterA, (Class<? extends Filter>) UsernamePasswordAuthenticationFilter.class);
        }

        @Override
        @Bean
        public …
Run Code Online (Sandbox Code Playgroud)

java captcha spring spring-security

11
推荐指数
1
解决办法
8910
查看次数

如何在spring应用程序中进行用户授权后添加自定义过滤器

我是Spring Security 3的新手.我正在使用角色供用户登录.

我想在用户被授权进入应用程序后添加一些会话值.也许我需要一些过滤器,以便重定向到我的方法,这会增加一些会话值.我已经配置了我的security.xml文件,但我不确定我是否正在做正确的事情.这方面的任何例子都会有所帮助.我应该使用哪种过滤器类?我应该如何配置security.xml文件?

<custom-filter ref="authenticationFilter" after="FORM_LOGIN_FILTER "/>

<beans:bean id="authenticationFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
    <beans:property name="filterProcessesUrl" value="/j_spring_security_check" />
    <beans:property name="authenticationManager" ref="authenticationManager" />
    <beans:property name="authenticationSuccessHandler" ref="successHandler" />
</beans:bean> 

<beans:bean id="successHandler" class="org.dfci.sparks.datarequest.security.CustomAuthorizationFilter"/>
Run Code Online (Sandbox Code Playgroud)

我的过滤器类方法我需要添加一些会话值.

public class CustomAuthorizationFilter implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
        Set<String> roles = AuthorityUtils.authorityListToSet(authentication
                .getAuthorities());
        if (roles.contains("ROLE_USER")) {
            request.getSession().setAttribute("myVale", "myvalue");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑代码

我修改了我的security.xml文件和类文件

<custom-filter ref="authenticationFilter" after="FORM_LOGIN_FILTER "/>  
Run Code Online (Sandbox Code Playgroud)
public class CustomAuthorizationFilter extends GenericFilterBean {

    /*
     * ServletRequestAttributes attr = (ServletRequestAttributes)
     * RequestContextHolder.currentRequestAttributes(); …
Run Code Online (Sandbox Code Playgroud)

spring spring-security

6
推荐指数
1
解决办法
3万
查看次数

注销后单击后退按钮后页面不安全

在我之前的工作中,我遇到了一个众所周知的问题,即无法阻止用户在退出后使用后退按钮导航网站.我的技术包括Spring,JavaScript以及Java AJAX库ZK的Mobile模块.除了使用后退按钮导航外,授权访问也起作用.我无法再访问应用程序代码.该应用程序是移动应用程序,我不是原作者.

我尝试了以下常见解决方案:


我们在以下定义中t2-spring-security-context.xml:

<http auto-config="true">
    <intercept-url pattern="/mobile-index*" access="ROLE_ADMIN"/>
    <intercept-url pattern="/t2-metrics*" access="ROLE_ADMIN"/>
    <intercept-url pattern="/t2-monitor*" access="ROLE_ADMIN"/>
    <form-login login-page="/login.jsp" authentication-failure-url="/loginerror.jsp"
                default-target-url="/mobile-index.jsp"/>
    <logout logout-success-url="/login.jsp" invalidate-session="true"/>

</http>
Run Code Online (Sandbox Code Playgroud)


其他有关我们实施的细节:

  • @RequestMapping在注释为的类上使用JavaScript 调用Java方法@Controller(IE t2-metrics.jsp具有JS以触发URL匹配请求映射)
  • 尝试向security:global-method-security方法添加应用程序上下文和角色注释
  • 使用scriptlet代码禁用对JSP页面的缓存,并且没有做任何事情.此外,在IntelliJ中调试应用程序,并且我的定义过滤器中的调试点未被命中.
  • 一旦他们使用后退按钮返回应用程序,用户仍然可以在应用程序中导航.

我唯一的想法是,问题涉及我们的客户端代码(JavaScript)或库(与Spring安全性的错误集成),因为调试没有达到Spring Security过滤器链.

javascript mobile spring spring-mvc spring-security

6
推荐指数
2
解决办法
1万
查看次数

添加要在Servlet 3+环境中的spring-security过滤器之后调用的自定义过滤器

我正在使用Spring-Security 3.2.4和Spring Boot 1.1.0(以及相关的依赖版本4.X).我正在编写一个将在嵌入式tomcat中运行的Web应用程序.

我正在尝试添加两个额外的过滤器(与Spring安全无关),其中一个将在Spring-Security-FilterChainProxy之前调用,另一个将在Spring-Security-FilterChainProxy之后调用.

我的Spring-Security配置文件:

@Configuration
@EnableWebMvcSecurity
public class SecurityCtxConfig extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
    .inMemoryAuthentication()
        .withUser("user").password("pass").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf()
            .disable()
            .authorizeRequests()
            .anyRequest()
            .authenticated()
            .and()
            .formLogin()
            .usernameParameter("user").passwordParameter("password");
}
}
Run Code Online (Sandbox Code Playgroud)

和Main类(Application.class):

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    @Bean
RequestFilter beforeSpringSecurityFilter(){
    return new RequestFilter();
}

@Bean
RequestFilter afterSpringSecurityFilter(){
    return new RequestFilter();
}

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

和Filter实现:

public class RequestFilter …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security spring-boot

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