#
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
#
h1. Synopsis

${project.name}

${project.description}

Maven URL
[mvn:${pct.groupId}/${project.artifactId}/${project.version}]

h1. Description

This bundle provides JAAS classes loaded during the Karaf boot process.

In particular, it provides the ProxyLoginModule.

The ProxyLoginModule is an OSGi proxy login module that should be used instead of a plain reference to
a given login module. It takes two properties, the name of the login module class, and the bundle to be used
to load it.
This class must be loadable from modules, so it has to be either in a fragment bundle attached to the
system bundle or be made available through boot delegation class path.

h1. See also

Security - section of the Karaf User GuideSecurity Framework - section of the Karaf Dever Guide
