4

Java-config に移動する必要があるspring-secuiry.xmldatabase.xmlがありますが、方法がわかりません..

これが私のものsercuirty.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-3.1.xsd">


    <global-method-security pre-post-annotations="enabled" />

    <http use-expressions="true">
        <intercept-url access="hasRole('ROLE_VERIFIED_MEMBER')" pattern="/mrequest**" />
        <intercept-url pattern='/*' access='permitAll' />
        <form-login default-target-url="/visit" />

        <logout logout-success-url="/" />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="cpilling04@aol.com.dev" password="testing" authorities="ROLE_VERIFIED_MEMBER" />
            </user-service>

        </authentication-provider>
    </authentication-manager>
</beans:beans>

そしてここに私のdatabase.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"

    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context 
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd
                            http://www.springframework.org/schema/tx
                            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                            http://www.springframework.org/schema/jdbc
                            http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
                            http://www.springframework.org/schema/jee
                            http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

    <!-- Last changed: $LastChangedDate: 2012-11-19 08:53:13 -0500 (Mon, 19 
        Nov 2012) $ @author $Author: johnathan.smith@uftwf.org $ @version $Revision: 
        829 $ -->

    <context:property-placeholder location="classpath:app.properties" />

    <context:component-scan base-package="org.uftwf" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager" />

    <jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/mySQLDB"
        expected-type="javax.sql.DataSource" />

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>org.uftwf.inquiry.model.MemberInquiryInformation</value>

            </list>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
                <prop key="format_sql">${format_sql}</prop>
            </props>
        </property>
    </bean>

    <bean id="hibernateTransactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>

誰かが次の Java-config を変更する方法を教えてください:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages= {"com.johnathanmsmith.mvc.web"})
public class WebMVCConfig extends WebMvcConfigurerAdapter {

    private static final String MESSAGE_SOURCE = "/WEB-INF/classes/messages";

    private static final Logger logger = LoggerFactory.getLogger(WebMVCConfig.class);

    @Bean
    public  ViewResolver resolver() {
        UrlBasedViewResolver url = new UrlBasedViewResolver();
        url.setPrefix("/WEB-INF/view/");
        url.setViewClass(JstlView.class);
        url.setSuffix(".jsp");
        return url;
    }


    @Bean(name = "messageSource")
    public MessageSource configureMessageSource() {
        logger.debug("setting up message source");
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename(MESSAGE_SOURCE);
        messageSource.setCacheSeconds(5);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver lr = new SessionLocaleResolver();
        lr.setDefaultLocale(Locale.ENGLISH);
        return lr;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        logger.debug("setting up resource handlers");
        registry.addResourceHandler("/resources/").addResourceLocations("/resources/**");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        logger.debug("configureDefaultServletHandling");
        configurer.enable();
    }

    @Override
    public void addInterceptors(final InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor());
    }

    @Bean
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver b = new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        mappings.put("org.springframework.web.servlet.PageNotFound", "p404");
        mappings.put("org.springframework.dao.DataAccessException", "dataAccessFailure");
        mappings.put("org.springframework.transaction.TransactionException", "dataAccessFailure");
        b.setExceptionMappings(mappings);
        return b;
    }

    @Bean
    public RequestTrackerConfig requestTrackerConfig()
    {
        RequestTrackerConfig tr = new RequestTrackerConfig();
        tr.setPassword("Waiting#$");
        tr.setUrl("https://uftwfrt01-dev.uftmasterad.org/REST/1.0");
        tr.setUser("root");

        return tr;
    }


}
4

2 に答える 2

7

コメントで指摘されているように、Spring セキュリティは Java 構成ではまだサポートされていません。

少し前に、基本的な Spring mvc webapp を完全な (またはその時点で可能な限り) コード構成に変換しました。

github でプロジェクト全体をチェックアウトできます。これはすべて箱から出してすぐに動作するはずであり、web/html5 の優れた実践にも inializr/bootstrap のものを使用しています。

私のコード構成ファイルはすべてここにあります

私のセキュリティ クラスでわかるように、これは一種のチートです。

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

/**
 * Spring doesn't yet support pure java configuration of spring security
 * so this will just have to import the old fashioned xml file.
 * 
 * @author rob
 *
 */
@Configuration
@ImportResource("classpath:META-INF/spring/security.xml")
public class SecurityConfiguration {}

アップデート

Spring-security 3.2 以降、Spring-security を Java ベースのコード構成に変換できるようになりました。ここのブログに書いています: http://automateddeveloper.blogspot.co.uk/2014/02/spring-4-xml-to-annotation-configuration.html

(Spring 4 を使用したソースコードと完全な Spring MVC プロジェクトを含む)

于 2013-03-16T12:40:48.403 に答える
5

やってみましょう-XMLを使用しないデータベース構成、つまりすべての注釈ベース。

まず、データベースの重要なプロパティファイルを作成し、それをアプリケーションのクラスパスに保持する予定です。MySQLとHibernateの例を取り上げます。

database.properties
-------------------
db.driver.class=com.mysql.jdbc.Driver
db.url=jdbc:mysql://hostname:port/dbname
db.username=myusername
db.password=mypassword

次に、この構成ファイルを表すSpring管理クラスを作成します。

@Component
@PropertySource(value={"classpath:database.properties"})
public class DatabaseConfiguration
{
    @Value("${db.driver.class}")
    private String mDriverClass;

    @Value("${db.url}")
    private String mConnectionURL;

    @Value("${db.username}")
    private String mUserID;

    @Value("${db.password}")
    private String mPassword;

    //Getters and setters for the above private variables.
}

同様に、休止状態の特定のプロパティを定義するためのプロパティファイルを作成します。これらのプロパティも、クラスパスに保持するつもりです。

hibernate.properties
--------------------
hibernate.dialect= org.hibernate.dialect.MySQLDialect
hibernate.id.new_generator_mappings=true
hibernate.show_sql=false

また、このプロパティファイルを定義するSpringマネージドクラス。

@Component
@PropertySource(value={"classpath:hibernate.properties"})
public class HibernateConfiguration
{
    @Value("${hibernate.dialect}")
    private String mHibernateDialect;

    @Value("${hibernate.id.new_generator_mappings}")
    private boolean mUseNewIdGeneratorMappings;

    @Value("${hibernate.show_sql}")
    private boolean mHibernateShowSQL;

    //Setters and getters for above fields
}

また、上記のクラスHibernateConfigurationを使用することからの小さなプロパティクラス(将来的には便利です)。

@Component
public class HibernateProperties
extends Properties
{
    @Autowired
    public HibernateProperties(HibernateConfiguration config)
    {
        setProperty("hibernate.dialect", config.getDialect());

        setProperty("hibernate.id.new_generator_mappings", config.useNewIdGeneratorMappings() ? "true" : "false");

        setProperty("hibernate.show_sql", config.showSQL() ? "true" : "false");
    }
}

次に、Spring管理の構成クラス(データベース関連の構成を持つアプリケーションコンテキストxmlファイルを置き換えるクラス)を選択します。DbAppConfigという名前を付けましょう。

@Configuration
@EnableTransactionManagement
public class DbAppConfig
{

    @Autowired
    LocalSessionFactoryBean factory;

    @Bean
    @Autowired
    public DataSource getDataSource(DatabaseConfiguration config)
    {
        DriverManagerDataSource datasource = new DriverManagerDataSource();

        datasource.setDriverClassName(config.getDriverClass());

        datasource.setUrl(config.getConnectionURL());

        datasource.setUsername(config.getUserID());

        datasource.setPassword(config.getPassword());

        return datasource;
    }

    @Bean
    @Autowired
    public LocalSessionFactoryBean getSessionFactoryBean(DataSource datasource, HibernateProperties properties)
    {
        LocalSessionFactoryBean factory = new LocalSessionFactoryBean();

        factory.setDataSource(datasource);

        factory.setHibernateProperties(properties);

        factory.setPackagesToScan(new String[]{"my.entity.packages.to.scan"});

        return factory;
    }

    /**
     * Since the LocalSessionFactoryBean is available on the context, the LocalSessionFactoryBean.getObject will supply
     * the session factory by the auto detection of spring.
     *
     * @param factory
     * @return
     */
    @Bean
    @Autowired
    public HibernateTransactionManager getTransactionManager(SessionFactory factory)
    {
        return new HibernateTransactionManager(factory);
    }

    /**
     * inclusion The PropertySourcesPlaceholderConfigurer automatically lets the
     * annotation included property files to be scanned. setting it static to spawn on startup.
     * @return
     */
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() 
    {
        PropertySourcesPlaceholderConfigurer ph = new PropertySourcesPlaceholderConfigurer();

        ph.setIgnoreUnresolvablePlaceholders(true);

        return ph;
    }
}

以上です!Springマネージドトランザクションマネージャーを利用できます。サービス(@Service steriotypes)クラスを@Transactionalで装飾し、DAO(@Repositoryステレオタイプ)を使用するだけです。

于 2013-03-16T14:39:07.050 に答える