小编raf*_*ego的帖子

在Spring Security登录期间添加cookie

我有一个使用Spring Security的Web项目,我试图在处理身份验证成功的方法中保存cookie.但是,当我查看浏览器的cookie时,只显示JSESSIONID,当我在Spring重定向到的servlet上查看request.getCookies()时,会发生相同的情况.

我试图将cookie保存在应用程序的一个servlet中,并且cookie保存正确,因此Spring Security可能会清除响应.你有什么主意吗?

一种解决方法是将其保存在Session中,然后获取它并将cookie保存在登录重定向到的servlet上.另外一个可以节约与像JavaScript的饼干.但我不喜欢这些解决方案.提前致谢

这是相关代码:

public class RoleBasedAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler implements
    AuthenticationSuccessHandler {
    ...
    // save a cookie with the selected language
    Map<String, String[]> parameterMap = request.getParameterMap();
    if (parameterMap.containsKey("language")) {
        saveCookie("language", parameterMap.get("language")[0], response);
    }
}

public static void saveCookie(String cookieName, String value, HttpServletResponse response) {
    Cookie cookie = new Cookie(cookieName, value);
    //maxAge is one month: 30*24*60*60 
    cookie.setMaxAge(2592000);
    cookie.setDomain("projectName");
    cookie.setPath("/");
    response.addCookie(cookie);
    }
}

<security:http auto-config="false" ...>
    <security:form-login login-page="/login.do" authentication-success-handler-ref="redirectRoleStrategy" .../>
    ...
</security:http>

<bean id="redirectRoleStrategy" class="com.companyName.security.RoleBasedAuthenticationSuccessHandler">
    <beans:property name="roleUrlMap">
        <beans:map> …
Run Code Online (Sandbox Code Playgroud)

java cookies spring spring-mvc spring-security

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

Maven在Jenkins执行时使用了不正确的Java版本

我有一些项目使用Maven和Jenkins编译和部署,他们一直工作到现在我已经将java版本从6更改为7.

为了做到这一点,我执行了命令sudo update-alternatives --config javac并更改了/ etc/profile文件中的JAVA_HOME和PATH的值.我还修改了pom文件,因此它使用jdk 1.7:

<properties>
    ...
    <jdk.version>1.7</jdk.version>
</properties>

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
        ...
        <configuration>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
        </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当我在控制台上执行它们时,它们编译正常并且显示的版本是正确的:

javac -version
javac 1.7.0_55

mvn install -debug
Apache Maven 2.2.1 (rdebian-8)
Java version: 1.7.0_55
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Run Code Online (Sandbox Code Playgroud)

但是,当我在jenkins工作中做同样的事情时,Maven使用的是1.6版本而不是1.7版本:

javac -version
javac 1.7.0_55

mvn install -debug
Apache Maven 2.2.1 (rdebian-8)
Java version: 1.6.0_31
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre
Run Code Online (Sandbox Code Playgroud)

我还修改了用于指示新版本的maven配置文件,在Jenkins管理面板中我更改了JDK版本.但是,Maven仍在使用1.6 jdk.

你知道我怎么改变它?

java linux maven jenkins

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

没有xml文件的Hibernate4配置 - sessionFactory为null

我有一个使用Spring3和Hibernate4的Web项目,现在我想在不使用xml文件的情况下测试DAO.为此,我创建了一个类,该类创建了一个LocalSessionFactoryBean,其中包含应用程序的xml文件中包含的数据和一个简单的测试类.

但是,localSessionFactoryBean.getObject()返回的sessionFactory为null.我一直在寻找像一些例子和他们有同样的问题,当我修改他们没有Spring运行.你有什么主意吗?

这是准备sessionFactory的代码:

@Configuration
@Transactional
@EnableTransactionManagement
@ComponentScan({ "com.company" })
public class HibernateInitializator {

    public SessionFactory getSessionFactory() {

        Properties hibernateProperties = getHibernateProperties();
        DataSource dataSource = getDatasourceConfiguration();
        LocalSessionFactoryBean localSessionFactoryBean = generateSessionFactoryBean(new String[] { "com.company" },
            dataSource, hibernateProperties);
        SessionFactory sessionFactory = localSessionFactoryBean.getObject();

        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(sessionFactory);

        return sessionFactory;
    }

    private DataSource getDatasourceConfiguration() {

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/dbName");
        dataSource.setUsername("username");
        dataSource.setPassword("password");

        return dataSource;
    }

    private static LocalSessionFactoryBean generateSessionFactoryBean(String[] basePackage, DataSource dataSource,
        Properties hibernateProperties) { …
Run Code Online (Sandbox Code Playgroud)

java hibernate

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

如何在Java中通过引用传递varargs

我正在编写一个接收任意数量参数并返回修改的方法.我尝试过使用varargs但是它不起作用,在这里你可以看到代码的简化版本:

public static void main(String[] args) {
   String hello = "hello";
   String world = "world";

   addPrefix(hello, world);

   System.out.println("hello: " + hello + "  world: " + world);
}

public static void addPrefix(String... elements) {
   for (int i = 0; i < elements.length; i++) {
      elements[i] = "prefix_" + elements[i];
   }

   for (int i = 0; i < elements.length; i++) {
      System.out.println(elements[i]);
   }
}
Run Code Online (Sandbox Code Playgroud)

印刷结果:

prefix_hello    
prefix_world    
hello: hello  world: world
Run Code Online (Sandbox Code Playgroud)

如您所见,在方法内部正确修改了值,但原始变量未更改.

我已经查看了很多页面,比如这里这里,但似乎Java将vars的值复制到a Object[],因此引用丢失了.

知道我怎么能这样做?

java variadic-functions

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