Hello,
please help me to configure embedded Oak repository with Spring. Tried to
find solution for a week, but it seems that mailing lis is the only chance,

How to configure security for web application? When i use repository in
standalone application i can login using "admin/admin" credentials and
everything works ok. But when i try to use the same code in web application
(Spring MVC, WildFly server, application packed in app.war), i get
PBOX00070: Password invalid/Password required. It looks like that Oak tries
to use WildFly Jaas configuration.

//Here is example code:

    public static void main(String[] args) {//this works
        Session session = null;
        try {
            SQLServerDataSource dataSource = new SQLServerDataSource();//i
use RDB as repository storage, it`s the only opton for me
            SecurityProvider sp = new SecurityProviderImpl();
            DocumentNodeStore ns = new
DocumentMK.Builder().setRDBConnection(dataSource).getNodeStore();
            Oak oak = new Oak(ns).with("AppName").with(sp);
            Repository repository = new Jcr(oak).createRepository();
            session = repository.login(new SimpleCredentials("admin",
"admin".toCharArray()));
            Node root = session.getRootNode(); }
catch (RepositoryException e) {
                e.printStackTrace();
            }
finally {
                session.logout();
            }
        }

I use the same code for bean creation in my web application. And get
PBOX00070: Password invalid/Password required

Here example:

//configuration
@Configuration
public class ReportConfiguration {

    @Autowired
    DataSource dataSource;
    Repository repository = null;

    @PostConstruct
    private void init() {
        DocumentNodeStore ns = new
DocumentMK.Builder().setRDBConnection(dataSource).getNodeStore();
        SecurityProvider sp = new SecurityProviderImpl();
        Oak oak = new Oak(ns).with("AppName").with(sp);
        repository = new Jcr(oak).createRepository();
    }

    @Bean
    public Repository getRepo() {
        return repository;
    }
}

//and controller
@Controller
@Component("ConfigController")
public class ConfigController {
    @Autowired
    Repository repository;
    private Object RepositoryException;

    //this causes PBOX00070: Password invalid/Password required
    @PostMapping(value = "/upload", consumes = "multipart/form-data")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file")
MultipartFile file) {
        Session session = null;
        try {
            session = repository.login(new SimpleCredentials("admin",
"admin".toCharArray()));
            Node root = session.getRootNode();
        } catch (javax.jcr.RepositoryException e) {
            e.printStackTrace();
        } finally {
            session.logout();
        }
        return ResponseEntity.ok("ok");
    }
}
The only difference that i see in debugger, that loginContext in
application on WildFly Oak has config = XMLLoginConfigImpl. And standalone
has config = ConfigurationUtils.

So the questions:
1. How to force Oak to use the same LoginContext as in standalone
application?
2. How to configure embeded Oak in web application with RDB storage. Where
to put repository.xml?

Reply via email to